Echart折線圖手柄觸發(fā)事件示例詳解
前言
這是我準備在這個項目中使用的圖形庫,這也是一款基于HTML5的圖形庫。圖形的創(chuàng)建也比較簡單,直接引用Javascript即可。使用這個庫的原因主要有三點,一個是因為這個庫是百度的項目,而且一直有更新,目前最新的是EChart 3;第二個是這個庫的項目文檔比較詳細,每個點都說明的比較清楚,而且是中文的,理解比較容易;第三點是這個庫支持的圖形很豐富,并且可以直接切換圖形,使用起來很方便。
下面話不多說了,來一起看看詳細的介紹吧
1 環(huán)境:
vue-cli(2.0)+ vue-echarts (git地址:https://github.com/ecomfe/vue-echarts(本地下載))
2 場景:
最近項目用echarts來展示圖標,其中有一個需求,需要拖動手柄,等松開手柄時,要根據(jù)手柄所在的位置(獲取手柄在的x軸信息),重新發(fā)送請求,來渲染數(shù)據(jù)。
echarts的手柄實例地址:http://echarts.baidu.com/examples/editor.html?c=line-tooltip-touch
3圖:
4遇到的bug:
4.1 手柄上的label信息,有時會刷新不出來。即上圖中的2016-10-07消失。
4.2 echarts的點擊事件對折線圖并不友好,必須點在折線圖的點坐標上才會觸發(fā)事件。so,要實現(xiàn)點擊圖中任意位置來即可實現(xiàn)觸發(fā)自己的事件。
4.3 echarts提供了可以拖動的手柄,但是并沒有松開手柄后觸發(fā)的事,這個沒有滿足我們產(chǎn)品的需求。當然有可能是我沒有找到,若有請告知,謝謝。
5解決以上的bug:
頁面的展示如下:
<template> <div> <div id='line' @touchend='touchs' @mouseup='touchs'> <v-chart auto-resize class='zhexian' :options='lineOption' :initOptions='initOptions' ref='line' /> </div> </div> </template> <script> //初始化折線的數(shù)據(jù) import lineoption from '@/assets/js/handleline.js' export default{ data(){ return{ lineOption:lineoption, initOptions:{ renderer: 'svg' || 'canvas' }, date:'',//發(fā)送Ajax時所需的參數(shù) reFlag:'',//避免重復發(fā)送請求時的中間變量 } }, } </script>
拖動手柄時,會實時觸發(fā)formater,
解決第一個bug ,label有時會消失,因為我以后的代碼會用到formatter,第一次要用formater ,我是這樣寫的,
this.lineOption.xAxis.axisPoint.label.formatter=function(param){ //param是X軸的信息 let value = _this.$echart.format.formatTime('yyyy-MM-dd', params.value); _this.date =value; console.log('實時獲取的X軸的事件'+_this.date) return value; },
,axisPoint對象的其他數(shù)據(jù)寫在了handleline.js中,解決方案就是把axisPoint的其他數(shù)據(jù)也重新setOption了,
mounted(){ // let _this = this; this.lineOption.xAxis.axisPointer={ value: '2016-10-7', snap: true, lineStyle: { color: '#004E52', opacity: 0.5, width: 2 }, label: { show: true, formatter: function (params) { let value = _this.$echart.format.formatTime('yyyy-MM-dd', params.value); _this.date =value; console.log('實時獲取的X軸的事件'+_this.date) return value; }, backgroundColor: '#004E52' }, handle: { show: true, color: '#004E52' } } },
解決第三個bug,結合了formatter 和 vue的touchend事件,單獨的formatter并沒有用,因為手指離開時,formatter的param數(shù)據(jù)會獲取多個,也有可能會是多個重復的數(shù)據(jù)。效果并不好。so結合了touchend事件,手指離開時獲取最終的date.
methods:{ touchs(){ //手指離開手柄事件,因為手柄滑動時,就會觸發(fā)formatter,這時,this.date 就會發(fā)生改變。當你手指觸發(fā)其他的地方時 //并不會改變this.date的值,so。為了避免手指離開時重復發(fā)送請求,需要一個中間變量。只有兩個值不相等才會去做自己想做的事。 if (this.reFlag == this.date) { return } this.reFlag = this.date //重新發(fā)送請求,渲染數(shù)據(jù),這時已經(jīng)或得了X軸的時間。 console.log(this.date) // this.getPieData() }, }
解決第二個bug ,這是從網(wǎng)上找到的。實現(xiàn)點擊折線圖的任意地方獲取x軸的信息,發(fā)送請求。同時,要讓lineOption中的tooltip:{triggerOn:'click'}
,否則點擊無效。
sendTime() { //寫在mounted中調(diào)用 var chart = this.$echart.init(this.$refs.line.$el) chart.getZr().on('click', params => { var pointInPixel = [params.offsetX, params.offsetY] if (chart.containPixel('grid', pointInPixel)) { let xIndex = chart.convertFromPixel({ seriesIndex: 0 }, [ params.offsetX, params.offsetY ])[0]; let a =this.$echart.format.formatTime('yyyy-MM-dd', xIndex); /*事件處理代碼書寫位置*/ // xIndex是個重要信息,用的時候最好打印看下具體的內(nèi)容再用 console.log(xIndex); // this.date = this.linedata[xIndex + 1][0]; // 手指點擊后,讓這兩個值相等,避免觸發(fā)touchend事件, this.reFlag = this.date=a; //重新發(fā)送請求 //this.getPieData() } }) },
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- JFreeChart插件實現(xiàn)的折線圖效果實例
- jQuery插件echarts設置折線圖中折線線條顏色和折線點顏色的方法
- jQuery插件echarts實現(xiàn)的多折線圖效果示例【附demo源碼下載】
- Echarts教程之通過Ajax實現(xiàn)動態(tài)加載折線圖的方法
- jQuery插件echarts實現(xiàn)的單折線圖效果示例【附demo源碼下載】
- jfreechart插件將數(shù)據(jù)展示成餅狀圖、柱狀圖和折線圖
- JFreeChart折線圖的生成方法
- JFreeChart動態(tài)畫折線圖的方法
- jfreechart畫折線圖的方法
- Echart折線圖手柄觸發(fā)事件示例詳解
相關文章
js實現(xiàn)點擊復制當前文本到剪貼板功能(兼容所有瀏覽器)
這篇文章主要介紹了js實現(xiàn)點擊復制當前文本到剪貼板功能,兼容所有瀏覽器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-12-12詳解JS中定時器setInterval和setTImeout的this指向問題
在js中setTimeout和setInterval都是用來定時的一個功能,下面這篇文章主要給介紹了JS中setInterval和setTImeout的this指向問題,文中通過示例介紹的很詳細,有需要的朋友可以參考借鑒,一起來看看吧。2017-01-01