vue项目中echarts自适应问题的高级解决过程
目录
- 一、问题描述
- 1.1 页面布局
- 1.2 问题复现
- 二、解决过程
- 2.1 增加图表resize
- 2.2 解决canvas画布大小和容器大小不一致的问题
- 2.3 动手添加延时
- 2.4 监听浏览器onresize事件
- 三、解决方案
- 总结
一、问题描述
1.1 页面布局
项目首页中有多个echarts图表,如下图所示:
页面布局如下:
index页面(绿框)是父页面,父页面中包含A页面(红框)和B页面(橙框),A页面中有3块,共5个echarts图,B页面中有2部分,左侧部分中有3个饼图,右侧部分是列表,综上,index页面共8个ecahrts图。ps:A页面和B页面都是组件化书写。
1.2 问题复现
点击浏览器右上角的 向下还原 按钮后,图表显示不正确,如下图:
原因:未进行图表自适应
二、解决过程
2.1 增加图表resize
window.addEventListener('resize', function () { chart.resize() })
增加后,点击浏览器向下还原按钮后,效果如下:
这里有个奇怪的现象:点击浏览器向下还原按钮,图表显示有问题;但是鼠标拖拽浏览器放大或缩小,图表显示正常(百思不得其解……)
通过Elements检查发现,canvas画布大小与容器大小不一致。ps:pink背景是容器大小
2.2 解决canvas画布大小和容器大小不一致的问题
利用resize设置width、height:
// 获取容器的宽高 let width = this.$refs.chart1.offsetWidth let height= this.$refs.chart1.offsetHeight // 一般这一步是写chart1.resize(),让图表根据当前屏幕尺寸自适应,但是当前canvas画布大小与容器大小不一致,而容器大小已经设置了百分比,所以可以在resize里面手动设置宽高,使其占满整个容器 chart1.resize({ // es6解构 width, height })
每个图表都设置,完成后效果如下:
依然显示有问题,要崩溃了……
耐心再找找原因!!!
苦思冥想后,猜测有可能的原因:窗口改变时 EChart 会立即获取宽度,但是此时宽度还在变化中,不是最终值,所以 ECharts 显示有问题,修改方法是添加一个延时。
2.3 动手添加延时
window.addEventListener('resize', function () { setTimeout(()=>{ chart1.resize() }, 100) })
添加完成后,依然没效果……
是不是延时时间设置的有点短???那就设置500毫秒试试,来吧
依然没效果,生气了
想想其他方法,苦思冥想中,有了,那我监听浏览器onresize事件可不可以?监听到后,重新渲染图表
2.4 监听浏览器onresize事件
去掉每个图表对resize事件的监听,在父组件中增加对onresize事件的监听。
let _this = this; window.onresize = function() { _this.$nextTick(()=>{ setTimeout(()=>{ _this.$refs.chartLine.executeAllChart1() // 重新渲染echarts的方法 if(_this.isCollectAdmin) { _this.$refs.tableLine.executeAllChart2() // // 重新渲染echarts的方法 } }, 500) }) }
添加完后,看效果:
哇偶,成功了!
注意事项,onresize事件的监听要放在父组件中,否则不会生效!!!!
三、解决方案
1、在每个图表中 利用resize设置width、height(本文2.2)
2、在父组件监听浏览器onresize事件(本文2.4),一定要加延时,否则不生效!!!100毫秒不行,加500!!!
over!!!
总结
到此这篇关于vue项目中echarts自适应问题的高级解决过程的文章就介绍到这了,更多相关vue echarts自适应问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
vue中设置echarts宽度自适应的代码步骤
目录 问题描述 无自适应效果图 有自适应效果图 代码步骤 问题描述 我们使用vue做项目的时候,常常需要做到echarts图表的自适应,一般是根据页面的宽度做对应的适应.本文记录一下设置echarts图表的自适应的步骤.我们先看一下没有做echarts自适应的效果 无自适应效果图 我们发现echarts图的宽度并没有随着页面宽度的变化而变化 有自适应效果图 很显然,这个才是我们想要的效果 代码步骤 echart图表本身提供了一个resize的函数,我们只需要监听页面的resize变化以后,去执行
-
vue中的echarts实现宽度自适应的解决方案
今天项目中需要使用到 echarts 为了自适应.找到了.以下解决方案. 效果图 代码 <template> <!-- 这是图表开始 --> <div class="chart"> <div ref="main1" style="width: 600px;height:400px;" ></div> <div ref="main2" style="wi
-
Vue-cli3中如何引入ECharts并实现自适应
目录 如何引入ECharts并实现自适应 效果 Vue-cli使用ECharts并封装ECharts组件 1. 导入echarts 2. 封装echarts组件 3. 父组件引用测试 如何引入ECharts并实现自适应 效果 1. 安装echarts npm install echarts 2. components/echarts/index.vue <template> <div :class="className" :style="{height:
-
vue中echarts3.0自适应的方法
前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 import 'echarts/lib/chart/line' // 引入提示框和图例组件 import 'echarts/lib/component/tooltip' import 'echarts/lib/component/legendScroll' 然后发现在缩放浏览器窗口时折线图并不会自适应
-
Vue中使用Echarts可视化图表宽度自适应的完美解决方案
目录 一.问题阐述: 二.解决思路: 三.最终效果: 一.问题阐述: 开发H5项目中应用到Echarts数据可视化,由于H5主要使用在手机,屏幕宽度大大限制了图表的展现,问题如下. 上图中x轴的数据是动态的,从2022年切换到2021年数据变化,此时如果x轴的数据过多就会显得格外拥挤. 二.解决思路: 我的解决方案是,在放置Echarts的容器(div)外层再套一层容器(div),外层容器宽度固定设置手机屏幕宽,并设置溢出显示滚动条(width: 100%;overflow: auto),内层E
-
Vue实现Echarts图表宽高自适应的实践
目录 1. 安装并引入 2. 定义防抖函数 3. 绘制图表代码 init 方法 resize 方法官网解释 1. 安装并引入 npm install echarts --save //main.js // import echarts from 'echarts'; import * as echarts from 'echarts'; // 如果安装的是echarts 5以上版本,则需此种方式引入 Vue.prototype.$echarts = echarts 2. 定义防抖函数 传送门:
-
vue使用echarts图表自适应的几种解决方案
1.使用window.onresize let myChart = echarts.init(document.getElementById(dom)) window.onresize = function () { myChat.resize() } 优点:可以根据窗口大小实现自适应 缺点: 多个图表自适应写法比较麻烦(当一个页面的图表太多时,这样写法不是很灵活): let myChart1 = echarts.init(document.getElementById(dom1)) let m
-
vue echarts实现改变canvas长和宽自适应
目录 echarts改变canvas长宽自适应 方法一:根据浏览器宽高为echarts容器赋宽高 方法二:根据echarts容器的父容器的宽高为其赋值 echarts自适应屏幕宽度自动改变大小 echarts改变canvas长宽自适应 存放Echarts的DOM容器,如果给的高和宽是百分比,渲染的时候DOM容器的高和宽是按百分比给的,但是DOM容器下的子元素div和canvas高和宽是根据图标内容渲染.项目应用的时候,底部会有一部分DOM容器和div的高度差,不美观. 希望Echarts的can
-
完美解决vue 中多个echarts图表自适应的问题
看代码吧~ <div class="echarts"> <IEcharts :option="bar" ref="echarts"></IEcharts> </div> mounted () { this.selfAdaption () }, methods: { //echarts自适应 selfAdaption () { const self = this: setTimeout(() =>
-
Vue 项目中Echarts 5使用方法详解
目录 前言 创建项目 基本使用 安装 使用方法 柱状图 动态排序柱状图 前言 Echarts 是一个纯JavaScript的图表库,兼容绝大部分的浏览器,底层依赖轻量级的canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表. 创建项目 先使用vue-cli创建一个新的项目,配置按照自己的需要选择,默认的也可 vue create vue_echarts cd vue_echarts npm run serve 基本使用 安装 首先安装echarts npm i
-
vue项目中vue-i18n和element-ui国际化开发实现过程
在vue构建的项目中,我们常用element-ui插件,在我的博客前面有讲述,具体怎么用vue-i18n插件进行国际化开发,但是在前面博客中,如果项目中使用了element-ui插件,插件中的语言文字替换可以结合element-ui插件一同进行.element-ui插件自身也提供了语言包.具体的配置和使用方法参考如下: 默认你已构建好了一个vue项目,在vue项目中安装vue-i18n以及element-ui插件 cnpm i vue-i18n --save-dev cnpm i element
-
vue项目中使用vue-i18n报错的解决方法
前言 Vue-i18n大家应该都不陌生,Vue-i18n安装的安装方法如下: npm install vue-i18n --save 然而最近在vue项目中使用vue-i18n的时候,居然报错了,通过查找相关的资料终于找到了解决的方法,下面话不多说了,来一起看看详细的介绍吧 发现问题 iview-admin框架克隆到本地,添加路由的时候,稍不注意就会遇到以下情况: Value of key 'xxx' is not string! Cannot translate the value of ke
-
Vue项目中使用addRoutes出现问题的解决方法
目录 前言 一.404页面 1. 出现的原因 2. 解决方案 二.刷新白屏 1. 出现原因 2. 解决方案 三.路由重复 1. 出现原因 2. 解决方案 总结 前言 addRoutes官方介绍: 函数签名: router.addRoutes(routes: Array<RouteConfig>) 动态添加更多的路由规则.参数必须是一个符合 routes 选项要求的数组. 这两天做vue后台权限管理系统的时候,发现使用vue提供的addRoute添加路由以后,会出现两个bug,一起来看看如何解
-
用electron打包vue项目中的报错问题及解决
目录 1. 首先一定要cd到项目的根目录 2. 接下来运行 如何用electron打包vue项目,请参见我的另一篇文章:如何用electron打包vue项目为桌面应用文件exe 这里,也要提到实际项目中的问题,可能有同志的目录结构和内容有些许差别,就我刚刚遇到的问题来说,常见的问题的有几个问题,以及解决办法如下: 1. 首先一定要cd到项目的根目录 (我这里是app)里面才能运行项目,再重新npm run build,不然的话很有可能出现 “ 系统找不到路径的问题 ”,成功的话会出现下面绿
-
vue项目部署跨域问题的详细解决过程
目录 首先是后端: 再是前端: 总结 跨域问题在前后端分离项目很常见,至于为什么会跨域,同源策略,百度各种博客都很详细,这里不再介绍,主要记录项目中的各种设置,解决的过程. 首先是后端: 过滤器: @Configuration public class GlobalCorsConfig { /** * 允许跨域调用的过滤器 */ @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfigurat
-
vue-cli npm如何解决vue项目中缺失core-js的问题
目录 vue-cli npm解决vue项目中缺失core-js 报错 原因 解决办法 vue踩坑:this dependency was not found 问题背景 vue-cli npm解决vue项目中缺失core-js 报错 This dependency was not found: core-js/modules/es.object.to-string in ./src/router/index.jsTo install it, you can run: npm install --s
-
在vue项目中封装echarts的步骤
为什么需要封装echarts 每个开发者在制作图表时都需要从头到尾书写一遍完整的option配置,十分冗余 在同一个项目中,各类图表设计十分相似,甚至是相同,没必要一直做重复工作 可能有一些开发者忘记考虑echarts更新数据的特性,以及窗口缩放时的适应问题.这样导致数据更新了echarts视图却没有更新,窗口缩放引起echarts图形变形问题 我希望这个echarts组件能设计成什么样 业务数据和样式配置数据分离,我只需要传入业务数据就行了 它的大小要完全由使用者决定 不会因为缩放出现变形问题
-
vue项目中封装echarts的优雅方式分享
目录 场景 需求 代码总览 实现 components--chart--index.vue components--chart--index.js components--chart--options main.js chartTest index.vue index.js 代码 总结 补充 补充2:图表高亮轮询,dispatchAction使用 使用方法 附:echarts 饼图调用高亮示例 dispatchAction 补充3:封装echarts地图,姐妹篇 总结 场景 1.Echarts使
-
Vue项目中引入 ECharts
目录 1.安装 2.引入 3.使用 4.按需引入 ECharts 图表和组件 1.安装 使用如下命令通过 npm 安装 ECharts npm install echarts --save 2.引入 安装完成以后,可以将echarts全部引入,这样一来,我们可以在该页面使用echarts所有组件:引入代码如下: import * as echarts from "echarts"; 3.使用 引入完毕之后,我们可通过echarts提供的接口画出对应的图表,使用方法如下: <tem
随机推荐
- javascript 写类方式之一
- Java版C语言版简单使用静态语言实现动态数组的方法
- spring boot + jpa + kotlin入门实例详解
- python实现下载整个ftp目录的方法
- 详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
- 详解centos7 docker1.12安装私有仓库
- Android+Html5混合开发仿微信朋友圈
- SQLServer 连接失败错误故障的分析与排除
- java设计模式之单例模式的详解及优点
- 做了个flash对mc移动的控制,代码很简单:)
- [基础知识]Linux新手系列之四
- java实现的冒泡排序算法示例
- Android编程之SDK安装组件的离线安装方法分享
- Android轻松实现多语言的方法示例
- PHP 使用二进制保存用户状态的实例
- ThinkPHP框架基于PDO方式连接数据库操作示例
- PHP实现转盘抽奖算法分享
- 浅谈Android硬件加速原理与实现简介
- MySQL全局锁和表锁的深入理解
- php 根据URL下载远程图片、压缩包、pdf等文件到本地
其他
- Android 自定义手势滑动view
- python打印等腰三角形
- 如何打包自开发的py模块
- winvista安装镜像
- 编译打包没问题,tomcat运行找不到依赖
- pytorch 如何自定义初始权值与阈值
- springboot @qualifier注解
- python爬虫关键词统计
- vue组件中如何设置100%的高度
- 如何用python计算回归树
- accessibilityservice 抖音火山粉丝
- android 图片随着扫描线逐渐切换
- JS 监听localStrage变化
- goland 附加远程进程
- vue van-list不触底加载
- pyqt5 实现tooltip效果
- HTML网站已运行多少天代码
- 微信小程序utils.js 引入
- selenium实现鼠标滚动
- python 遍历文件夹 按时间排序