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 相关文章推荐
javascript 动态加载 css 方法总结
Jul 11 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
Nov 16 Javascript
js从外部获取图片的实现方法
Aug 05 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
微信小程序点击item使之滚动到屏幕中间位置
Mar 25 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
自主招生自荐信格式
2013/12/03 职场文书
自荐信格式简述
2014/01/25 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
数学教师个人工作总结
2015/02/06 职场文书