vue tab切换,解决echartst图表宽度只有100px的问题


Posted in Javascript onJuly 19, 2020

解决思路:直接将图表的宽高写死,根据实际代码进行改写,提供一个思路

1.将图表放进一个div里面

<div class="echarts">
 <div id="myChart" :style="{width: '100%', height: '150px'}"></div>
</div>

2.定义一个方法,并在mounted视图更新的时候执行

<script>
export default {
 mounted() {
 this.setMyChart();
 },
 methods: {
 setMyChart() {
 // jq写法
 // 获取父元素
 var echarts = $('.echarts');
 // 获取父元素宽高
 var echartsWidth = echarts.outerWidth(true);
 var echartsHeight = echarts.outerHeight(true);
 // 获取图表元素
 var myChart = $('#myChart');
 // 将父元素宽高赋值给图表
 myChart.css('width', myChart);
 myChart.css('height', myChart);
 
 // 原生js写法
 // 获取父元素
 // var echarts = document.querySelector('.echarts');
 // 获取父元素宽高
 // var echartsWidth = getStyle(echarts,'width');
 // var echartsHeight = getStyle(echarts,'height');
 // 获取图表元素
 // var myChart = document.querySelector('#myChart');
 // 将父元素宽高赋值给图表
 // myChart.style.width = echartsWidth;
 // myChart.style.height = echartsHeight;

 // 这是一个封装好的方法,兼容IE,第一个参数,element, 第二个属性,css样式
 // function getStyle(obj, attr) { 
 // if (obj.currentStyle) { 
 // return obj.currentStyle[attr]; 
 // } else { 
 // return document.defaultView.getComputedStyle(obj,null)[attr]; 
 // } 
 // }
 }
 }
};
</script>

3.样式

<style scoped>
.echarts {
 width:300px;
 height:150px;
} 
</style>

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

补充知识:vue项目tab切换echart图表切换宽度缩小和图表内容不正确解决

代码:

布局:

<TabButton :btnValue1="'总数'" :btnValue2="'明细'" @watchFlag="handler"></TabButton>
 <div class="it_content">
 <div class="picture" id="work" ref="work" v-show="flag===false"></div>
 <div class="picture" id="workTotal" ref="workTotal" v-show="flag===true"></div>
 </div>

处理函数:

handler(flag){
 this.flag=flag;
 if(!this.flag){
 this.$nextTick(() => {
    this.drawwork(); // 明细图
   });
 }else{
 this.$nextTick(() => {
    this.drawworkTotal(); // 总数图
   });
 }
 },

1、解决宽度缩小的问题

本来是用vue指令的v-if,但是发现用v-if出现宽度缩小的问题。后来改用v-show。这是因为v-if指令是将Dom元素去除掉位置空间了,v-show是将Dom元素位置空间保留了,但并没有进行渲染。v-show保留所定义的样式,空间位置也被保留,echarts图表的宽高依旧和之前一样,所以不会缩小。

2、图表内容不正确

利用this.$nextTick(() => {})。Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。 $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。flag发生变化之后,Dom没有立即更新了,通过 $nextTick 回调函数,执行echarts的绘画。

nextTick的由来:

由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

nextTick的触发时机:

在同一事件循环中的数据变化后,DOM完成更新,立即执行nextTick(callback)内的回调。

结合nextTick的由来,可以推出每个事件循环中,nextTick触发的时机:

同一事件循环中的代码执行完毕 -> DOM 更新 -> nextTick callback触发

应用场景:

需要在视图更新之后,基于新的视图进行操作。

以上这篇vue tab切换,解决echartst图表宽度只有100px的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
Apr 26 Javascript
alert和confirm功能介绍
May 21 Javascript
Angular.js自定义指令学习笔记实例
Feb 24 Javascript
Node.js  事件循环详解及实例
Aug 06 Javascript
bootstrap-Treeview实现级联勾选
Nov 23 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
Jul 15 Javascript
Angularjs实现数组随机排序的方法
Oct 02 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
webpack优化的深入理解
Dec 10 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 #Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 #Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 #Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 #Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 #Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 #Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 #Javascript
You might like
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
js运动事件函数详解
2016/10/21 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python 实现A*算法的示例代码
2018/08/13 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
鸿星尔克广告词
2014/03/21 职场文书
员工工作自我评价
2014/09/26 职场文书
2015年外联部工作总结
2015/04/03 职场文书
小学教师教学随笔
2015/08/14 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android