vue中使用echarts标签页下后面的表宽度不能设置百分比的问题

本文介绍了解决ECharts图表在加载时因执行速度过快导致的CSS百分比无法正确显示的问题。通过使用setTimeout延迟初始化,确保了页面元素尺寸计算完成后再进行图表绘制,避免了100%显示为100px的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:echartjs执行太快,css的100%还没来得及反应,js就已经执行完了,所以把100%转成100px。

解决办法:

将初始化代码放在setTimeout中

setTimeout(() => {
        this.chart = echarts.init(this.$refs[ref])
        // 把配置和数据放这里
        this.chart.setOption({
          color: ['#3398DB'],
          tooltip: {
            trigger: 'axis',
            axisPointer: { // 坐标轴指示器,坐标轴触发有效
              type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
            }
          },
          grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
          },
          xAxis: [{
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
            axisTick: {
              alignWithLabel: true
            }
          }],
          yAxis: [{
            type: 'value',
            name: name
          }],
          series: [{
            name: '直接访问',
            type: 'bar',
            barWidth: '60%',
            data: [10, 52, 200, 334, 390, 330, 220]
          }]
        })
      }, 0)

 

### 在 Vue.js 中固定 ECharts 或 Chart.js 曲线图的位置 为了在 Vue.js 项目中将 ECharts 或 Chart.js 的曲线图组件固定在页面的特定位置并保持始终显示,可以采用 CSS 和 JavaScript 结合的方式。 #### 使用 ECharts 实现固定位置的曲线图 首先,在 `main.js` 文件中引入 ECharts 并注册全局变量以便于在整个应用中使用: ```javascript import * as echarts from 'echarts'; Vue.prototype.$echarts = echarts; ``` 接着,在目标 `.vue` 组件内定义一个容器用于承载图,并利用样式属性将其定位到所需位置。这里给出一段 HTML 及其对应的样式设置作为例子[^1]: ```html <template> <div id="app"> <!-- 图容器 --> <div ref="chartContainer" class="fixed-chart"></div> </div> </template> <style scoped> .fixed-chart { position: fixed; /* 固定定位 */ top: 20px; /* 距离顶部距离 */ left: 30%; /* 左边距百分比 */ width: 480px; /* 设置宽度 */ height: 360px; /* 设置高度 */ } </style> ``` 随后初始化图实例以及配置项,确保当视口大小改变时也能自动调整图尺寸: ```javascript export default { mounted() { const chartDom = this.$refs.chartContainer; let myChart = this.$echarts.init(chartDom); window.onresize = function () { myChart.resize(); }; var option; option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [150, 230, 224, 218, 135, 147, 260], type: 'line' }] }; option && myChart.setOption(option); } }; ``` 对于 **Chart.js** 来说,操作流程相似,主要区别在于库的选择和 API 接口中存在差异。以下是简化的 Chart.js 版本实现方式[^2]: ```bash npm install chart.js --save ``` 然后同样是在模板里准备画布标签 `<canvas>` ,并通过自定义类名来控制它的布局特性;之后再编写相应的脚本来加载数据源并渲染图形对象。 ```html <template> <div id="app"> <!-- Canvas element for the line chart --> <canvas ref="myChart" class="fixed-line-chart"></canvas> </div> </template> <script> import { Line } from 'chart.js/auto'; export default { mounted() { new Line(this.$refs.myChart.getContext('2d'), { data: { labels: ["January", "February", "March", "April"], datasets: [ { label: '# of Votes', data: [12, 19, 3, 5], borderColor: 'rgba(75, 192, 192, 1)', backgroundColor: 'rgba(75, 192, 192, 0.2)' } ] }, options: {} }); } } <style scoped> .fixed-line-chart { position: absolute !important; /* 强制绝对定位 */ top: 10vh; /* 上方留白 */ left: calc((100% - 50vw)/2); /* 居中对齐 */ max-width: 50vw; /* 占据屏幕一半宽 */ min-height: 30vh; /* 至少占据三成高 */ } </style> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值