效果展示
 
需求
- 点击柱子显示当天的详细数据
 
实现
-  
这里只需要拿到被点击柱子对应的X轴时间坐标,可以直接监听click事件
 -  
在DOM加载完为chart注册点击事件
 -  
拿到被点击的柱子的X轴坐标name
 -  
抛回父组件
 
方法一:直接监听click事件实现这个效果
<mark>click</mark>
- 可以拿到柱条 color: “#1DADF1”
 - 第几个 componentIndex: 0
 - 类型 seriesType/componentSubType: “bar”
 - data/value
 - X轴坐标值 name
 - seriesName 类目名
 - 等等
 
mounted() {
   
      this.$nextTick(() => {
   
        this.initChart()
        this.chart = echarts.init(this.$el, 'macarons')
        let self = this
        let chart = this.chart
        this.chart.on('click', params => {
   
          console.log(params)
          self.$emit('getBar', params.name)
        })
      })
},
  方法二:结合getZr和click实现这个效果(比较麻烦,可以用于更复杂效果的实现)
<mark>getZr()</mark>
-  
结合click事件可以拿到点击位置
 -  
params.offsetX,params.offsetY 为点击位置的坐标
 -  
将画布设置成相对定位,弹框设置成绝对定位
 -  
可以实现在点击位置展示弹框的效果
 
<mark>containPixel()</mark>
- 判断给定的点是否在指定的坐标系或者系列上
 
<mark>containPixel()</mark>
-  
转换像素坐标值到逻辑坐标系上的点
 -  
在DOM加载完为chart注册点击事件
 -  
拿到被点击的柱子的index(从0开始,number类型)
 -  
抛回父组件,直接用这个index去x轴data里面取当前被点击的柱子的x轴坐标
 
mounted() {
   
      this.$nextTick(() => {
   
        this.initChart()
        this.chart = echarts.init(this.$el, 'macarons')
        let self = this
        let chart = this.chart
        this.chart.getZr().on('click', (params) => {
   
            const position= [params.offsetX, params.offsetY];
            if (chart.containPixel('grid', position)) {
   
                let index= chart.convertFromPixel({
   seriesIndex: 0}, [params.offsetX, params.offsetY])[0];
                self.$emit('getBar', index)
            }
        });
      })
    },

京公网安备 11010502036488号