亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

VUE 單頁(yè)面使用 echart 窗口變化時(shí)的用法

瀏覽:71日期:2022-12-22 08:06:32

在 VUE 項(xiàng)目中,為了使 echart 在窗口變化時(shí)能夠自適應(yīng),要用到 window.resize = function(){ .......};

但是我在項(xiàng)目剛開始的時(shí)間就有一個(gè)地方的高度變化使用了 window.resize ,在里面再次使用 會(huì)覆蓋掉原來(lái)的,所以在里面圖表使用時(shí)可以用

window.addEventListener(’resize’,this.resizeFu,false);

resixeFu 就是圖表變化時(shí)的方法

resizeFu(){ let div = document.getElementById(’changeData’); if(div && this.changeData.DataTime.length>0){ this.chartsDiv.changeData.resize(); }}

但里面有一個(gè)問題就是:每次進(jìn)來(lái)當(dāng)前頁(yè)面都會(huì)執(zhí)行 window.addEventListener

解決方法是在路由勾子函數(shù)中把它給去掉,方法是

beforeRouteLeave(to, from, next) { //頁(yè)面走掉把事件給清除掉 window.removeEventListener('resize', this.resizeFu,false); next()},

補(bǔ)充知識(shí):vue+echart圖表自適應(yīng)屏幕大小、點(diǎn)擊側(cè)邊欄展開收縮圖表自適應(yīng)大小resize

開發(fā)中用到了echart圖表,需要圖表自適應(yīng)大小resize,一開始使用的方法是:

window.onresize = function () { this.myChart.resize();};

但是又遇到一個(gè)問題,點(diǎn)擊側(cè)邊欄的展開收起的時(shí)候,圖表的大小沒有自適應(yīng)(因?yàn)榇翱诘拇笮]有變化)

這里參考vue+element+admin的框架寫的自適應(yīng)

VUE 單頁(yè)面使用 echart 窗口變化時(shí)的用法

一、index.vue的文件

引入chart圖表``

VUE 單頁(yè)面使用 echart 窗口變化時(shí)的用法

這里是數(shù)據(jù)

chartData: { title: { text: ’3-1(2)’, textStyle: { color: ’#979797’, fontSize: 14 } }, tooltip: { trigger: ’axis’ }, legend: { icon: ’rect’, itemWidth: 4, // 圖例標(biāo)記的圖形寬度 itemHeight: 11, textStyle: { lineHeight: 65, fontSize: 14 }, data: [’郵件營(yíng)銷’, ’聯(lián)盟廣告’, ’視頻廣告’, ’直接訪問’, ’搜索引擎’] }, grid: { left: ’3%’, right: ’4%’, bottom: ’3%’, containLabel: true }, xAxis: { type: ’category’, boundaryGap: false, data: [’周一’, ’周二’, ’周三’, ’周四’, ’周五’, ’周六’, ’周日’] }, yAxis: { type: ’value’ }, series: [ { name: ’郵件營(yíng)銷’, type: ’line’, stack: ’總量’, data: [0, 132, 101, 134, 90, 230, 210] }, { name: ’聯(lián)盟廣告’, type: ’line’, stack: ’總量’, data: [220, 12, 191, 234, 20, 330, 10] }, { name: ’視頻廣告’, type: ’line’, stack: ’總量’, data: [15, 232, 201, 154, 190, 330, 110] }, { name: ’直接訪問’, type: ’line’, stack: ’總量’, data: [320, 420, 301, 334, 60, 330, 320] }, { name: ’搜索引擎’, type: ’line’, stack: ’總量’, data: [820, 932, 901, 934, 1290, 1330, 1320] } ] }

二、chart.vue

<template> <div : : /></template><script>import echarts from ’echarts’import resize from ’./mixins/resize’export default { mixins: [resize], props: { className: { type: String, default: ’chart’ }, width: { type: String, default: ’100%’ }, height: { type: String, default: ’300px’ }, autoResize: { type: Boolean, default: true }, chartData: { type: Object, required: true } }, data() { return { chart: null } }, watch: { chartData: { deep: true, handler(val) { this.setOptions(val) } } }, mounted() { this.$nextTick(() => { this.initChart() }) }, beforeDestroy() { if (!this.chart) { return } this.chart.dispose() this.chart = null }, methods: { initChart() { this.chart = echarts.init(this.$el, ’macarons’) this.setOptions(this.chartData) }, setOptions(chartData) { this.chart.setOption(chartData) } }}</script>

三、resize.js

import { debounce } from ’./debounce’export default { data() { return { $_sidebarElm: null } }, mounted() { this.$_initResizeEvent() this.$_initSidebarResizeEvent() }, beforeDestroy() { this.$_destroyResizeEvent() this.$_destroySidebarResizeEvent() }, // to fixed bug when cached by keep-alive // https://github.com/PanJiaChen/vue-element-admin/issues/2116 activated() { this.$_initResizeEvent() this.$_initSidebarResizeEvent() }, deactivated() { this.$_destroyResizeEvent() this.$_destroySidebarResizeEvent() }, methods: { // use $_ for mixins properties // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential $_resizeHandler() { return debounce(() => { if (this.chart) { this.chart.resize() } }, 100)() }, $_initResizeEvent() { window.addEventListener(’resize’, this.$_resizeHandler) }, $_destroyResizeEvent() { window.removeEventListener(’resize’, this.$_resizeHandler) }, $_sidebarResizeHandler(e) { if (e.propertyName === ’width’) { this.$_resizeHandler() } }, $_initSidebarResizeEvent() { this.$_sidebarElm = document.getElementsByClassName(’sidebar-container’)[0] this.$_sidebarElm && this.$_sidebarElm.addEventListener(’transitionend’, this.$_sidebarResizeHandler) }, $_destroySidebarResizeEvent() { this.$_sidebarElm && this.$_sidebarElm.removeEventListener(’transitionend’, this.$_sidebarResizeHandler) } }}

四、debounce.js

/** * @param {Function} func * @param {number} wait * @param {boolean} immediate * @return {*} */export function debounce(func, wait, immediate) { let timeout, args, context, timestamp, result const later = function() { // 據(jù)上一次觸發(fā)時(shí)間間隔 const last = +new Date() - timestamp // 上次被包裝函數(shù)被調(diào)用時(shí)間間隔 last 小于設(shè)定時(shí)間間隔 wait if (last < wait && last > 0) { timeout = setTimeout(later, wait - last) } else { timeout = null // 如果設(shè)定為immediate===true,因?yàn)殚_始邊界已經(jīng)調(diào)用過了此處無(wú)需調(diào)用 if (!immediate) { result = func.apply(context, args) if (!timeout) context = args = null } } } return function(...args) { context = this timestamp = +new Date() const callNow = immediate && !timeout // 如果延時(shí)不存在,重新設(shè)定延時(shí) if (!timeout) timeout = setTimeout(later, wait) if (callNow) { result = func.apply(context, args) context = args = null } return result }}

以上這篇VUE 單頁(yè)面使用 echart 窗口變化時(shí)的用法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 久久国产精品二国产精品 | 亚洲香蕉国产高清在线播放 | 日本欧美片| 亚欧精品一区二区三区四区 | 国产99视频精品免费观看9e | 日本黄色性生活片 | 一级成人 理伦片 | 免费一级黄色录像 | 国产一卡 | 亚洲国产精品线播放 | 国产亚洲婷婷香蕉久久精品 | 成人性生活免费视频 | 污网址免费 | 2019国产开嫩苞视频 | 午夜影院毛片 | 97色在线视频观看香蕉 | 亚洲国产一区二区在线 | 日韩色视 | 爱爱爱免费视频观看在线网站 | 欧美黄a | 一级黄色生活片 | 国产3页 | 久草经典视频 | 水果污视频 | 亚洲一级高清在线中文字幕 | 国产在线观看一区 | 91亚洲精品成人一区 | 国产91色综合久久免费 | 亚洲国产精品成人精品软件 | 国产女人精品性视频 | 久久99热不卡精品免费观看 | 福利网站污 | 亚洲 欧美 自拍 卡通 综合 | 欲色影视天天一区二区三区色香欲 | 黄色免费视屏 | 国产成人一区二区三区精品久久 | 国产精品日韩欧美久久综合 | 国内自拍在线视频高清 | a级网站| 欧美性生大片免费观看 | 国产馆精品推荐在线观看 |