echarts点击事件多次触发解决

原地址:https://blog.csdn.net/shiyanfangye/article/details/81910218

解决方式:myCharts.off('click')

最近写vue项目时用到echarts做个小功能,点击饼状图的每一块,生成新的柱状图,同时要给柱状图绑定点击事件,弹出每一条柱状数据详情。

做完后发现一个问题,第一次点击柱状图时点击事件只触发一次,点击饼状图第二次生成柱状图后,柱状图的点击事件就会触发两次,以此类推……最后越来越多。

代码如下:

```

// 画饼状图

drawPie() {

        let myCharts = Echarts.init(document.getElementById('pie'))

        let option = {

          title: {

            text: '所有会员',

            left: 'center'

          },

          tooltip: {

            trigger: 'item'

          },

          legend: {

            bottom: 10,

            left: 'center',

            data: ['注册会员', '超级合伙人', '超级合伙人-战略合作', '网点']

          },

          series: [

            {

              type: 'pie',

              center: ['50%', '50%'],

              selectedMode: 'single',

              data: this.allMember

            }

          ]

        }

        myCharts.setOption(option)

        // 点击饼状图的每一块生成新的数据

        myCharts.on('click', (params) => {

          this.getData(params.name)

        })

      }

// 获取数据,数据时请求接口动态获取的

getData (name) {

        let url = '/api/user/top/role?roleId=' + name

        this.$root.loading.show()

        this.$http.get(url).then(res => {

          this.$root.loading.hide()

          if (res.data.success) this.chartsData = res.data.data.content

          else this.$message.error()

          this.drawBar(name, this.chartsData)

        })

      }

// 画柱状图

drawTopten(name, val) {

        let myCharts = Echarts.init(document.getElementById('bar'))

        myCharts.off('click') // 这里很重要!!!

        let x = []

        let y1 = []

        let y2 = []

        let idList = []

        val.forEach(e => {

          x.push(e.name)

          y1.push(e.invitationNum)

          y2.push(e.totalMoney / 100)

          idList.push(e.id)

        }) // 这些都是自己做的一些数据处理,可以忽略

        let option = {

          title: {

            text: name + '前十用户',

            left: 'center'

          },

          tooltip: {

            trigger: 'axis',

            axisPointer: {

              type: 'shadow'

            }

          },

          legend: {

            bottom: 10,

            left: 'center',

            data: ['推广用户', '总收益/元']

            // selectedMode: false

          },

          toolbox: {

            show: true,

            orient: 'vertical',

            left: 'right',

            top: 'center'

          },

          calculable: true,

          xAxis: [

            {

              type: 'category',

              name: '昵称',

              axisTick: {show: false},

              data: x

            }

          ],

          yAxis: [

            {

              type: 'value'

            }

          ],

          series: [

            {

              name: '推广用户',

              type: 'bar',

              barGap: 0,

              data: y1

            },

            {

              name: '总收益/元',

              type: 'bar',

              data: y2

            }

          ]

        }

        myCharts.on('click', (e) => {

          alert(111) // 如果不加off事件,就会叠加触发

        })

        myCharts.setOption(option)

      }

```

其中重点就是,在画触发点击事件的柱状图时,首先要加上一个off事件: myCharts.off('click')

看过其他的clear方法,或者在setOption时加上第二个参数true其实都是没用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,460评论 1 45
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,196评论 0 10
  • 我们总是试图用最快的方法,去完成某个任务。然而总是在不停的找新的方法(一直找到疲惫),而忘了事情的根本(所带来的乐趣)。
    你大爷的3阅读 1,342评论 0 0
  • 重写你的自我评语 我拥有自信是在参加工作三四年之后。从上学时代到刚工作那几年,整个人都是自卑的,在选拔上新岗位后,...
    丽丽_8228阅读 1,450评论 0 1
  • 效率问题 2016年7月2日 在你动手之前,你通常拥有的只是一个大体的想法而已。这个想法的价值通常非常有限,真正重...
    观察者_王动阅读 1,477评论 5 0

友情链接更多精彩内容