vue中echarts圖表大小適應(yīng)窗口大小且不需要刷新案例
我就廢話不多說(shuō)了,大家還是直接看代碼吧~
內(nèi)容如下:
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例 let myChart = this.$echarts.init(document.getElementById('myChart')) //根據(jù)窗口的大小變動(dòng)圖表 --- 重點(diǎn) window.onresize = function(){ myChart.resize(); //myChart1.resize(); //若有多個(gè)圖表變動(dòng),可多寫 }
代碼如下:
mounted() { const that = this window.onresize = () => {// 根據(jù)窗口大小調(diào)整曲線大小 let myChart = this.$echarts.init(document.getElementById('myChart')); myChart.resize(); } },
補(bǔ)充知識(shí):如何解決Vue項(xiàng)目中使用echarts,寬度變化導(dǎo)致圖不能resize問(wèn)題
情景:
開(kāi)發(fā)PC端管理系統(tǒng),項(xiàng)目左側(cè)目錄可收縮,右側(cè)是對(duì)應(yīng)的頁(yè)面,右側(cè)頁(yè)面里面包含了echarts開(kāi)發(fā)的幾個(gè)折線圖,如圖:
當(dāng)左側(cè)目錄展開(kāi)的時(shí)候,會(huì)把右側(cè)頁(yè)面壓縮,右側(cè)頁(yè)面的echarts折線圖寬度就會(huì)發(fā)生改變,因?yàn)轫?xiàng)目考慮到適配大屏的問(wèn)題,所以,右側(cè)兩個(gè)echarts使用的都是百分比寬度,左側(cè)菜單展開(kāi)后的樣子如圖:
會(huì)導(dǎo)致echarts折線圖超出畫布,所以為了解決這個(gè)問(wèn)題,
第一個(gè)想法是:
通過(guò)js邏輯判斷左側(cè)菜單是否展開(kāi)來(lái)動(dòng)態(tài)改變echarts折線圖的寬度,結(jié)果是 沒(méi)有用;
第二個(gè)想法是:
通過(guò)動(dòng)態(tài)判斷左側(cè)菜單是否撐開(kāi),然后在右側(cè)文件mounted生命周期里寫一個(gè)無(wú)限定時(shí)器,每間隔500毫秒動(dòng)態(tài)執(zhí)行下,初始化echarts折線圖的方法,結(jié)果:也沒(méi)用
最終百度了一波,通過(guò)網(wǎng)上其他大佬寫的博客,找到了解決方法:
劃重點(diǎn)
1.引入 element-resize-detector依賴
2.新建 chart.resize.js 文件,添加下面代碼
import echarts from 'echarts'; import Vue from 'vue'; import elementResizeDetectorMaker from "element-resize-detector" export var version = '0.0.1'; var compatible = (/^2\./).test(Vue.version); if (!compatible) { Vue.util.warn('vue echarts resize directive ' + version + ' only supports Vue 2.x, and does not support Vue ' + Vue.version); } let HANDLER = "_vue_echarts_resize_handler" function bind(el) { unbind(el); el[HANDLER] = function () { let chart = echarts.getInstanceByDom(el); if (!chart) { return; } chart.resize(); } //監(jiān)聽(tīng)window窗體變化,更新echarts大小 //window.addEventListener("resize", el[HANDLER]) //監(jiān)聽(tīng)綁定的div大小變化,更新echarts大小 elementResizeDetectorMaker().listenTo(el,el[HANDLER]) } function unbind(el) { //window.removeEventListener("resize", el[HANDLER]); elementResizeDetectorMaker().removeListener(el,el[HANDLER]) delete el[HANDLER]; } var directive = { bind: bind, unbind: unbind }; Vue.directive("on-echart-resize", directive)
然后需要對(duì)應(yīng)的在 echarts 圖 上綁定一個(gè) v-on-echart-resize
不綁定 v-on-echart-resize ,不起效果 ,親測(cè)
<template> <div id="leftEchartsLine" ref="leftEchartsLine" v-on-echart-resize></div> </template>
v-on-echart-resize
這個(gè)是新增的 ,之前沒(méi)有
引入
import elementResizeDetectorMaker from "element-resize-detector";
import "./chart.resize";
然后在 mounted 寫
mounted() { let erd = elementResizeDetectorMaker(); let that = this; erd.listenTo(document.getElementById("leftEchartsLine"), (element) => { let width = element.offsetWidth; let height = element.offsetHeight; that.$nextTick(() => { //使echarts尺寸重置 that.echarts.init(document.getElementById("leftEchartsLine")).resize(); }); }); },
改完后的樣子:
這樣就能解決 echarts 折線圖,寬度變化 ,導(dǎo)致的圖不能resize問(wèn)題咯~~~
以上這篇vue中echarts圖表大小適應(yīng)窗口大小且不需要刷新案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 在vue中添加Echarts圖表的基本使用教程
- vue+echarts實(shí)現(xiàn)動(dòng)態(tài)繪制圖表及異步加載數(shù)據(jù)的方法
- vue.js+Echarts開(kāi)發(fā)圖表放大縮小功能實(shí)例
- 在Vue 中實(shí)現(xiàn)循環(huán)渲染多個(gè)相同echarts圖表
- vue使用echarts圖表的詳細(xì)方法
- 在vue中使用echarts圖表實(shí)例代碼詳解
- Vue2 使用 Echarts 創(chuàng)建圖表實(shí)例代碼
- vue使用echarts圖表自適應(yīng)的幾種解決方案
- vue+echarts圖表使用的問(wèn)題記錄
相關(guān)文章
Vue.js Ajax動(dòng)態(tài)參數(shù)與列表顯示實(shí)現(xiàn)方法
Vue.js是一個(gè)輕巧、高性能、可組件化的MVVM庫(kù),同時(shí)擁有非常容易上手的API。下面通過(guò)本文給大家介紹vue.js ajax動(dòng)態(tài)參數(shù)與列表顯示實(shí)現(xiàn)方法,感興趣的朋友一起看看吧2016-10-10Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05vue項(xiàng)目設(shè)置打包后的靜態(tài)文件訪問(wèn)路徑
這篇文章主要介紹了vue項(xiàng)目設(shè)置打包后的靜態(tài)文件訪問(wèn)路徑,vue項(xiàng)目的最終項(xiàng)目文件需要經(jīng)過(guò)打包輸出,靜態(tài)文件的訪問(wèn)路徑需要在vue.config.js文件中設(shè)置,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02