vue實(shí)現(xiàn)多個(gè)echarts根據(jù)屏幕大小變化而變化實(shí)例
前言
有如下頁(yè)面需求:在一個(gè)頁(yè)面展示多個(gè)echarts圖表,并且根據(jù)屏幕大小變化而變化。
實(shí)例
可以封裝成組件使用,以增加代碼復(fù)用性
// myCharts.vue <template> <div class="charts-comps" ref="charts"></div> </template> <script> import echarts from 'echarts' export default { name: 'myCharts', props: { type: { type: String, default: '' } }, data () { return { resizeTimer: null, myChart: null } }, methods : { init () { let myChart = echarts.init(this.$refs.charts); this.myChart = myChart; myChart.setOption({ xAxis: { type: 'category', boundaryGap: false, data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line', areaStyle: {} }] }); } } mounted () { this.init(); // 初始化圖表 let _this = this; window.addEventListener('resize', function () { if (_this.resizeTimer) clearTimeout(_this.resizeTimer); _this.resizeTimer = setTimeout(function () { _this.myChart.resize(); }, 100) }) } } </script> <style lang="less" scoped> .charts-comps{ width: 100%; height: 100%; } </style>
這樣就可以在需要用到的地方使用了
// index.vue <template> <my-charts class="charts-comps" ref="charts" v-for="item in dataList" :key="item"></my-charts> </template> <script> import myCharts from './myCharts' export default { name: 'test', components: {myCharts}, data () { return { dataList: ['test1','test2','test3','test4'] } } } </script>
關(guān)鍵代碼解析
let _this = this; window.addEventListener('resize', function () { ... })
在myCharts組件中去監(jiān)聽窗口大小變化,這樣可以針對(duì)每一個(gè)圖表很方便的resize()重繪圖表(Echarts.resize()是echarts的對(duì)圖表進(jìn)行重新繪制的方法)。這里使用window.addEventListener而不使用window.onresize的原因是:window.onresize繪覆蓋掉前面定義的方法,而只執(zhí)行最后一個(gè),導(dǎo)致圖表只有最后一個(gè)重繪了,而window.addEventListener避免了這個(gè)問題。
if (_this.resizeTimer) clearTimeout(_this.resizeTimer); _this.resizeTimer = setTimeout(function () { _this.myChart.resize(); }, 100)
結(jié)合 函數(shù)防抖(debounce) 避免在窗口大小變化時(shí)頻繁的進(jìn)行圖表的resize()。在處理復(fù)雜的function時(shí)可以很大限度的提高性能。實(shí)現(xiàn)原理就是對(duì)要執(zhí)行的目標(biāo)方法延時(shí)處理,設(shè)置一個(gè)定時(shí)器,當(dāng)再次執(zhí)行相同方法時(shí)(窗口大小變化時(shí)會(huì)被頻繁的偵聽到onresize),若前一個(gè)定時(shí)任務(wù)還未執(zhí)行完,則清除掉定時(shí)任務(wù),重新定時(shí)。這樣當(dāng)屏幕大小在100毫秒之內(nèi)沒有再次變化時(shí)才會(huì)對(duì)Echarts進(jìn)行resize(),當(dāng)然時(shí)間段可以根據(jù)自身需要設(shè)置長(zhǎng)一點(diǎn)。
補(bǔ)充知識(shí):vue+echarts 同頁(yè)面多個(gè)echarts圖表,明明寬度設(shè)置的都是100%,卻只有第一個(gè)生效以及如何實(shí)現(xiàn)自適應(yīng)
問題描述
三個(gè)echarts圖表,明明寬度設(shè)置的都是100%,卻只有第一個(gè)生效以及如何實(shí)現(xiàn)自適應(yīng)
解決辦法
1.初始化時(shí)需要加上,確保操作的是最新的DOM
this.$nextTick(_ => { });
2.echarts圖表自適應(yīng)實(shí)現(xiàn),需要在渲染圖表后加上
window.addEventListener("resize", function() { myChart.resize(); });
完整如下:
以上這篇vue實(shí)現(xiàn)多個(gè)echarts根據(jù)屏幕大小變化而變化實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue使用canvas畫布實(shí)現(xiàn)平面圖點(diǎn)位標(biāo)注功能(最新推薦)
這篇文章主要介紹了vue使用canvas畫布實(shí)現(xiàn)平面圖點(diǎn)位標(biāo)注功能,經(jīng)過本文一番研究發(fā)現(xiàn)canvas標(biāo)簽可以完成很多功能,電子簽名,點(diǎn)位標(biāo)注,問題標(biāo)注,畫圖功能,感興趣的朋友跟隨小編一起看看吧2023-07-07vue webpack build資源相對(duì)路徑的問題及解決方法
這篇文章主要介紹了vue webpack build資源相對(duì)路徑的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06vue設(shè)置導(dǎo)航欄、側(cè)邊欄為公共頁(yè)面的例子
今天小編就為大家分享一篇vue設(shè)置導(dǎo)航欄、側(cè)邊欄為公共頁(yè)面的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-11-11解決Vue_localStorage本地存儲(chǔ)和本地取值問題
這篇文章主要介紹了解決Vue_localStorage本地存儲(chǔ)和本地取值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07vue3+ts項(xiàng)目搭建的實(shí)現(xiàn)示例
這篇文章主要介紹了vue3+ts項(xiàng)目搭建的實(shí)現(xiàn)示例,本文目的在于記錄自己項(xiàng)目框架搭建的過程,通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03ElementUI 修改默認(rèn)樣式的幾種辦法(小結(jié))
這篇文章主要介紹了ElementUI 修改默認(rèn)樣式的幾種辦法(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07詳解vuex中mapState,mapGetters,mapMutations,mapActions的作用
這篇文章主要介紹了vuex中mapState,mapGetters,mapMutations,mapActions的作用,需要的朋友可以參考下2018-04-04vue+ElementUI實(shí)現(xiàn)訂單頁(yè)動(dòng)態(tài)添加產(chǎn)品數(shù)據(jù)效果實(shí)例代碼
本篇文章主要介紹了vue+ElementUI實(shí)現(xiàn)訂單頁(yè)動(dòng)態(tài)添加產(chǎn)品效果實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07