今天就跟大家聊聊有关使用Echart怎么实现折线图手柄触发事件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
10年积累的网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有牙克石免费网站建设让你可以放心的选择与我们合作。
1 环境:
vue-cli(2.0)+ vue-echarts
2 场景:
需求,需要拖动手柄,等松开手柄时,要根据手柄所在的位置(获取手柄在的x轴信息),重新发送请求,来渲染数据。
3图:

4遇到的bug:
4.1 手柄上的label信息,有时会刷新不出来。即上图中的2016-10-07消失。
4.2 echarts的点击事件对折线图并不友好,必须点在折线图的点坐标上才会触发事件。so,要实现点击图中任意位置来即可实现触发自己的事件。
4.3 echarts提供了可以拖动的手柄,但是并没有松开手柄后触发的事,这个没有满足我们产品的需求。当然有可能是我没有找到,若有请告知,谢谢。
5解决以上的bug:
页面的展示如下:
拖动手柄时,会实时触发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对象的其他数据写在了handleline.js中,解决方案就是把axisPoint的其他数据也重新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数据会获取多个,也有可能会是多个重复的数据。效果并不好。so结合了touchend事件,手指离开时获取最终的date.
methods:{
touchs(){
//手指离开手柄事件,因为手柄滑动时,就会触发formatter,这时,this.date 就会发生改变。当你手指触发其他的地方时
//并不会改变this.date的值,so。为了避免手指离开时重复发送请求,需要一个中间变量。只有两个值不相等才会去做自己想做的事。
if (this.reFlag == this.date) {
return
}
this.reFlag = this.date
//重新发送请求,渲染数据,这时已经或得了X轴的时间。
console.log(this.date)
// this.getPieData()
},
}解决第二个bug ,这是从网上找到的。实现点击折线图的任意地方获取x轴的信息,发送请求。同时,要让lineOption中的tooltip:{triggerOn:'click'} ,否则点击无效。
sendTime() {
//写在mounted中调用
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是个重要信息,用的时候最好打印看下具体的内容再用
console.log(xIndex);
// this.date = this.linedata[xIndex + 1][0];
// 手指点击后,让这两个值相等,避免触发touchend事件,
this.reFlag = this.date=a;
//重新发送请求
//this.getPieData()
}
})
},看完上述内容,你们对使用Echart怎么实现折线图手柄触发事件有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。