dataZoom跟随鼠标位置左右滑动

摆脱传统dataZoom组件只能拖动的问题

var yData1 = [
   2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3, 10.2, 54.2, 90.4, 43.2, 100.3, 65.2, 99.1
]
var yData2 = [
   2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3, 22.4, 11.2, 67.4, 88.9, 130.2, 79.3, 67.3
]
// 初始数据范围
var initialDataZoom = {
    start: 0,
    end: 100 // 这里的值根据你的数据范围来设置
};

option = {
   tooltip: {
      trigger: 'axis',
      axisPointer: {
         type: 'shadow',
         crossStyle: {
            color: '#999'
         }
      },
      backgroundColor: '#ffffff'
   },
   legend: {
      data: ['套餐用户', '低感套餐用户'],
      right: '8%',
      top: '4%',
      itemWidth: 10,
      itemHeight: 10
   },
   xAxis: [
      {
         type: 'category',
         data: ['999元', '799元', '599元', '499元', '399元', '299元', '239元', '199元', '169元', '159元', '149元', '129元', '99元', '79元', '59元', '39元', '29元', '19元', '未知'],
         axisPointer: {
            type: 'shadow'
         },
         axisTick: {
            show: false,
         },
         axisLine: {
            lineStyle: {
               color: '#999999'
            }
         },
         axisLabel: {
            color: '#999999'
         }
      }
   ],
   yAxis: [
      {
         type: 'value',
         min: 0,
         max: 250,
         interval: 50,
         splitLine: {
            show: true,
            lineStyle: {
               type: 'dashed'
            }
         },
         axisLabel: {
            color: '#999999'
         },
         axisTick: {
            show: false,
         },
         axisLine: {
            show: false
         }
      }
   ],
   series: [
      {
         name: '套餐用户',
         type: 'bar',
         tooltip: {
            valueFormatter: function (value) {
               return value + ' 万';
            }
         },
         itemStyle: {
            color: '#5257F9',
            borderRadius: 3
         },
         barMaxWidth: 15,
         data: yData1
      },
      {
         name: '低感套餐用户',
         type: 'bar',
         tooltip: {
            valueFormatter: function (value) {
               return value + ' 万';
            }
         },
         itemStyle: {
            color: '#FC7A3D',
            borderRadius: 3
         },
         barMaxWidth: 15,
         data: yData2
      }
   ],
   dataZoom: [
      {
         id: 'dataZoomY',
         xAxisIndex: [0],
         show: true, //是否显示滑动条,不影响使用
         type: 'slider', // 这个 dataZoom 组件是 slider 型 dataZoom 组件
         startValue: 0, // 从头开始。
         endValue: 10, // 一次性展示5个
         height: 3,
          start: initialDataZoom.start,
            end: initialDataZoom.end,
         borderColor: 'transparent',
         fillerColor: 'rgba(87, 102, 236,1)',
         zoomLock: true,
         showDataShadow: false, //是否显示数据阴影 默认auto
         backgroundColor: '#fff',
         showDetail: false, //即拖拽时候是否显示详细数值信息 默认true
         realtime: true, //是否实时更新
         filterMode: 'filter',
         handleIcon: 'circle',
         handleStyle: {
            color: 'rgba(87, 102, 236,1)',
            borderColor: 'rgba(87, 102, 236,1)',
         },
         // handleSize: '80%',
         moveHandleSize: 0,
         // maxValueSpan: "2014-02-24",
         // minValueSpan: 4,
         brushSelect: false, //刷选功能,设为false可以防止拖动条长度改变 ************(这是一个坑)
      },
      {
         //没有下面这块的话,只能拖动滚动条,鼠标滚轮在区域内不能控制外部滚动条
         type: "inside",
         xAxisIndex: [0],//控制哪个轴,如果是 number 表示控制一个轴,如果是 Array 表示控制多个轴。此处控制第二根轴
         zoomOnMouseWheel: false, //滚轮是否触发缩放
         moveOnMouseMove: true, //鼠标移动能否触发平移
         moveOnMouseWheel: true,//鼠标滚轮能否触发平移
      },
   ]
};
// 更新图表配置
myChart.setOption(option);

// 监听鼠标移动事件
myChart.getZr().on('mousemove', function (params) {
    // 获取鼠标在画布上的相对位置
    var mouseX = params.event.offsetX;
    
    // 计算新的dataZoom范围
    var dataZoomWidth = initialDataZoom.end - initialDataZoom.start;
    var newStart = Math.max(0, mouseX - dataZoomWidth / 2);
    var newEnd = Math.min(100, mouseX + dataZoomWidth / 2); // 这里的值根据你的数据范围来设置
    
    // 更新dataZoom配置
    myChart.setOption({
        dataZoom: [
            {
                type: 'slider',
                start: newStart,
                end: newEnd
            }
        ]
    });
});

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值