Echart--折线图手柄触发事件

1 环境: vue-cli(2.0)+ vue-echarts  (git地址:https://github.com/ecomfe/vue-echarts)

2 场景:最近项目用echarts来展示图标,其中有一个需求,需要拖动手柄,等松开手柄时,要根据手柄所在的位置(获取手柄在的x轴信息),重新发送请求,来渲染数据。

echarts的手柄实例地址:http://echarts.baidu.com/examples/editor.html?c=line-tooltip-touch

3图:

4遇到的bug:

4.1 手柄上的label信息,有时会刷新不出来。即上图中的2016-10-07消失。

4.2 echarts的点击事件对折线图并不友好,必须点在折线图的点坐标上才会触发事件。so,要实现点击图中任意位置来即可实现触发自己的事件。

4.3 echarts提供了可以拖动的手柄,但是并没有松开手柄后触发的事,这个没有满足我们产品的需求。当然有可能是我没有找到,若有请告知,谢谢。

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>
    //初始化折线的数据
    import lineoption from ‘@/assets/js/handleline.js‘
    export default{
        data(){
            return{
                lineOption:lineoption,
                initOptions:{
                    renderer: ‘svg‘ || ‘canvas‘
                },
                date:‘‘,//发送Ajax时所需的参数
                reFlag:‘‘,//避免重复发送请求时的中间变量
            }
        },
      }
</script>

拖动手柄时,会实时触发formater,

解决第一个bug ,label有时会消失,因为我以后的代码会用到formatter,第一次要用formater ,我是这样写的,

this.lineOption.xAxis.axisPoint.label.formatter=function(param){             //param是X轴的信息2   let value =  _this.$echart.format.formatTime(‘yyyy-MM-dd‘, params.value);3  _this.date =value;4  console.log(‘实时获取的X轴的事件‘+_this.date)5  return value;6},

,axisPoint对象的其他数据写在了handleline.js中,解决方案就是把axisPoint的其他数据也重新setOption了,

mounted(){ 2            // 3            let _this = this; 4            this.lineOption.xAxis.axisPointer={ 5            value: ‘2016-10-7‘, 6            snap: true, 7            lineStyle: { 8                color: ‘#004E52‘, 9                opacity: 0.5,10                width: 211            },12            label: {13                show: true,14                formatter: function (params) {15                    let value =  _this.$echart.format.formatTime(‘yyyy-MM-dd‘, params.value);16                    _this.date =value;17                    console.log(‘实时获取的X轴的事件‘+_this.date)18                    return value;19                },20                backgroundColor: ‘#004E52‘21            },22            handle: {23                show: true,24                color: ‘#004E52‘25            }26           }27        },

解决第三个bug,结合了formatter 和 vue的touchend事件,单独的formatter并没有用,因为手指离开时,formatter的param数据会获取多个,也有可能会是多个重复的数据。效果并不好。so结合了touchend事件,手指离开时获取最终的date.

 1     methods:{
 2             touchs(){
 3              //手指离开手柄事件,因为手柄滑动时,就会触发formatter,这时,this.date 就会发生改变。当你手指触发其他的地方时
 4              //并不会改变this.date的值,so。为了避免手指离开时重复发送请求,需要一个中间变量。只有两个值不相等才会去做自己想做的事。
 5               if (this.reFlag == this.date) {
 6                     return
 7                   }
 8                 this.reFlag = this.date
 9                //重新发送请求,渲染数据,这时已经或得了X轴的时间。
10                console.log(this.date)
11              // this.getPieData()
12            },
13         }

解决第二个bug ,这是从网上找到的。实现点击折线图的任意地方获取x轴的信息,发送请求。同时,要让lineOption中的tooltip:{triggerOn:‘click‘},否则点击无效。

 1     sendTime() {
 2                 //写在mounted中调用
 3                   var chart = this.$echart.init(this.$refs.line.$el)
 4                   chart.getZr().on(‘click‘, params => {
 5                    var pointInPixel = [params.offsetX, params.offsetY]
 6                    if (chart.containPixel(‘grid‘, pointInPixel)) {
 7                       let xIndex = chart.convertFromPixel({ seriesIndex: 0 }, [
 8                             params.offsetX,
 9                          params.offsetY
10                     ])[0];
11                     let a =this.$echart.format.formatTime(‘yyyy-MM-dd‘, xIndex);
12                   /*事件处理代码书写位置*/
13                   // xIndex是个重要信息,用的时候最好打印看下具体的内容再用
14                  console.log(xIndex);
15                 // this.date = this.linedata[xIndex + 1][0];
16                 // 手指点击后,让这两个值相等,避免触发touchend事件,
17                 this.reFlag = this.date=a;
18                 //重新发送请求
19                 //this.getPieData()
20         }
21       })
22     },

原文地址:https://www.cnblogs.com/mengdiezhuangzhou/p/10123758.html

时间: 2024-11-02 04:31:02

Echart--折线图手柄触发事件的相关文章

echart 折线图、柱状图、饼图、环形图颜色修改

之前在做报表的时候用过echart 用完也就完了,而这次在用的时候已经忘了,所以这里简单记录一下,好记性不如烂笔头!!! 1.折线图修改颜色: [javascript] view plain copy xAxis: { type: 'category', boundaryGap: false, data: ['年龄','20岁以下','30岁','40岁','50岁','60岁','60岁以上'] }, yAxis: { type: 'value' }, series: [ { name:'员工

echart折线图小知识

1)在折线图中,有时我们不想让太多折线显示,那么就隐藏,点击legend区域文字再显示. 比如我们要隐藏的折线叫"联盟广告",代码如下 1 var selected = {}; 2 selected['联盟广告'] = false; 3 option.legend.selected = selected; 4 在series中依然有它相关的数据 1 series : [ 2 { 3 name:'邮件营销', 4 type:'line', 5 stack: '总量', 6 data:[1

Echart--手柄触发事件(折线图)

1 环境: vue-cli(2.0)+ vue-echarts  (git地址:https://github.com/ecomfe/vue-echarts) 2 场景:最近项目用echarts来展示图标,其中有一个需求,需要拖动手柄,等松开手柄时,要根据手柄所在的位置,重新发送请求,来渲染数据. echarts的手柄实例地址:http://echarts.baidu.com/examples/editor.html?c=line-tooltip-touch 3图: 4遇到的bug: 4.1 手柄

Echart饼图、柱状图、折线图(pie、bar、line)添加点击事件

var myChart= echarts.init(document.getElementById('myChart')); myChart.on('click', function (param) { alert('点击了我!'); }); Echart事件参数可以去config.js查找 Echart饼图.柱状图.折线图(pie.bar.line)添加点击事件

echart折线区域图

在引入echart区域折线图时,没有出现对应的区域图 当发现引入下面代码到自己的代码中并没有对应的区域图 option = { xAxis: { type: 'category', boundaryGap: false, data: mydata.xname(改成自己的数据) }, yAxis: { type: 'value' }, series: [{ data: mydata.ydata,(改成自己的数据) type: 'line', areaStyle: {} }] };[这里写链接内容]

用Echart创建简单的折线图

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD

echart折线堆叠图 Y轴数据不堆叠

<!DOCTYPE html> <html> <head></head> <body>     <div class="row form-inline form-ranking">     <div class="form-group">         <label class="control-label">店铺:</label>   

百度推出的echarts,制表折线图柱状图饼图等的超级工具

一.简介: 1.绘制数据图表,有了它,想要网页上绘制个折线图.柱状图,从此easy. 2.使用这个百度的echarts.js插件,是通过把图片绘制在canvas上在显示在页面上. 官网对echarts的简介: ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRen

Android开发学习之路-自定义控件(天气趋势折线图)

之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普通的折线图,上下分别带有数字,点击的时候显示当天温度的差值. 创建一个类继承自View,并添加两个构造方法: public class TrendGraph extends View { public TrendGraph(Context context) { // 在java代码中创建调用 sup