【echarts】拖拽滑块dataZoom-slider自定义样式,简单适配移动端

电脑端

移动端

代码片段

js 复制代码
    dataZoom: [
      {
        type: 'inside',
        start: 0,
        end: 100
      },
      {
        type: 'slider',
        backgroundColor: '#F2F5F9',
        fillerColor: '#BFCCE3',
        height: 13, // 设置slider的高度为15
        start: 0,
        end: 100,
        right: 60,
        left: 60,
        bottom: 15,
        handleIcon:
          'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5M36.9,35.8h-1.3z M27.8,35.8 h-1.3H27L27.8,35.8L27.8,35.8z', // 使用类似 axisPointer 的图标
        handleSize: '200%', // 放大按钮
        borderColor: 'none',
        handleStyle: {
          color: '#BFCCE3',
          shadowBlur: 6,
          shadowColor: 'rgba(123, 154, 204, 0.5)',
          shadowOffsetX: 0, // 阴影偏移x轴多少
          shadowOffsetY: 0 // 阴影偏移y轴多少
        },
        // 显示的label的格式化器
        // 20050101 变为 2005\n0101
        labelFormatter: function (index, value) {
          const year = value.slice(0, 4);
          const date = value.slice(4);
          return year + '\n' + date;
        },
        textStyle: {
          fontStyle: 'italic' // 设置字体倾斜
        },
        showDataShadow: false // 隐藏数据阴影
      }
    ]

思路:

  1. showDataShadow: false // 隐藏数据阴影
    是把数据预览去掉
  2. 移动端不太方便,所以把按钮进行了修改方便用户拖拽。
js 复制代码
        handleIcon:
          'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5M36.9,35.8h-1.3z M27.8,35.8 h-1.3H27L27.8,35.8L27.8,35.8z', // 使用类似 axisPointer 的图标
        handleSize: '200%', // 放大按钮
        borderColor: 'none',
        handleStyle: {
          color: '#BFCCE3',
          shadowBlur: 6,
          shadowColor: 'rgba(123, 154, 204, 0.5)',
          shadowOffsetX: 0, // 阴影偏移x轴多少
          shadowOffsetY: 0 // 阴影偏移y轴多少
        },
  1. 因为 日期格式是 YYYYMMDD, 手机上显示太长了,这里做了换行处理。
js 复制代码
        // 显示的label的格式化器
        // 20050101 变为 2005\n0101
        labelFormatter: function (index, value) {
          const year = value.slice(0, 4);
          const date = value.slice(4);
          return year + '\n' + date;
        },
这里有个坑:labelFormatter

labelFormatter官网说,value在type 为 'category'的时候,是索引值。

但我实际看到的效果不是。

比如我有7000个数据点,每次拖拽的时候,索引index只有200多个,导致我获取不到数据。

因为只想拖拽的时候,格式化显示的label,第二个参数就是当时显示的label,但是文档里没有标出来。
https://echarts.apache.org/zh/option.html#dataZoom-slider.labelFormatter

相关推荐
wing984 分钟前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
Highcharts.js4 分钟前
常见报错排雷指南2:导出失败的官方解法
javascript·react.js·ecmascript·highcharts·可视化图表·导出模块失败·导出服务
EatFan11 分钟前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡35 分钟前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒1 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
计算机魔术师1 小时前
Suno 发布 v6 音乐模型,推出 v6、v6-wild、v6-mini 三个版本
前端
whyweplay2 小时前
elpis : DSL动态组件学习
前端
用户921080262862 小时前
前端 Vue 专栏 06:异步更新机制、任务队列与 nextTick
前端
杨芋爽2 小时前
管理后台列表页为什么一直转圈?从一次 1+N 请求扇出聊聊前端性能优化
javascript
晴天163 小时前
Chrome DevTools 深度调试指南
前端·chrome·chrome devtools