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 相关文章推荐
createElement与createDocumentFragment的点点区别小结
Dec 19 Javascript
浅析IE10兼容性问题(frameset的cols属性)
Jan 03 Javascript
AngularJS HTML编译器介绍
Dec 06 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
React组件的三种写法总结
Jan 12 Javascript
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
javaScript产生随机数的用法小结
Apr 21 Javascript
vue cli3.0 引入eslint 结合vscode使用
May 27 Javascript
Vue开发中遇到的跨域问题及解决方法
Feb 11 Javascript
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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
Python整数对象实现原理详解
2019/07/01 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
高三毕业寄语
2014/04/10 职场文书
学生安全承诺书
2014/05/22 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书