解决Echarts-dataZoom在windows触屏(一体机)设备上无法触屏拖动问题。

本文主要介绍了在Windows触屏设备上,Echarts的dataZoom功能无法通过触屏拖动的问题。作者分析了原因,发现官方并未适配此类设备的触摸事件。提出了三种解决方案,包括修改源码、手动添加'ontouchstart'事件和设置zRender库的相关属性。此外,还建议改善dataZoom的手柄设计,以提升触屏设备上的用户体验。
摘要由CSDN通过智能技术生成


一、问题

用echarts绘制了折线图,开启dataZoom功能后,在windows下用鼠标点击拖动与使用移动设备触屏拖动均正常。但是,如果是windows触屏设备,使用触屏时拖不动下方的dataZoom。

在这里插入图片描述

在百度和google了一番后发现,原来是官方并没有适配这种设备的触摸事件。在github上也能找到其他人提出的issue,但官方仍未解决问题。

在这里插入图片描述


二、寻找原因

首先,测试了一下windows触屏拖动时,触发的事件是什么,在测试后发现会触发两种事件:touch、pointer。mouse事件不会触发

结合部分issues提供的方案,查看了一下echarts的源码。可以发现在 node_modules/zrender/zrender.js 中,有这样一句代码,判定当前设备是否为触屏设备。

在这里插入图片描述

在控制台输出 'ontouchstart' in window 结果为false。

在这里插入图片描述


三、解决办法

第一种方式:修改源码把判定默认为true,不过这种方式不太好。

第二种方式:手动在window中添加’ontouchstart’事件。相对来说比修改源码方便。

相当于将设备默认为触屏设备。经过测试,不会影响鼠标事件以及其他的echarts图表功能,刚好解决问题。

// app.vue
// 解决Echarts dataZoom无法识别window触屏设备的bug
window.ontouchstart = (e) => {
  e.preventDefault()
}

第三种方式(推荐):

import zRenderEnv from 'zrender/lib/core/env';
zRenderEnv.touchEventsSupported = true;
zRenderEnv.pointerEventsSupported = false;

四、题外话

dataZoom默认的手柄太小,在触屏设备不好拖动,建议更改成圆形按钮,可以自定义更改样式,修改配置项里的handleIcon即可。

在这里插入图片描述
或者同心圆
在这里插入图片描述

// 第一种,正常圆
dataZoom:[
    {
        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"
    }
]
// 第二种,同心圆
dataZoom:[
    {
        handleIcon:'path://M50,50 m-15,0 a 15,15 0 1,0 30,0 a 15,15 0 1,0 -30,0 M50,50 m-7.5,0 a 7.5,7.5 0 1,0 15,0 a 7.5,7.5 0 1,0 -15,0',
    }
]
如果你在使用 EChartsdataZoom 组件时发现无法进行拖动操作,可能是因为你没有启用 dataZoom 组件的拖动功能。要启用 dataZoom拖动功能,你需要设置 dataZoomzoomLock 属性为 false。 以下是一个示例代码: ```javascript // 假设你已经创建了一个 ECharts 实例并且有一个包含所有数据的数据数组 var myChart = echarts.init(document.getElementById('my-chart')); // 替换为你的 ECharts 实例 var data = [/* your data array */]; // 配置 ECharts 图表的 option var option = { xAxis: { type: 'category', data: data.map(function (item) { return item.name; }) }, yAxis: { type: 'value' }, series: [{ type: 'line', data: data.map(function (item) { return item.value; }) }], dataZoom: [{ type: 'slider', start: 0, end: 100, // 可视化全部数据 showDetail: false, // 可选,是否显示详细信息 zoomLock: false // 启用拖动功能 }] }; // 将配置应用于图表 myChart.setOption(option); ``` 在这个示例中,我们在 dataZoom 配置项中添加了一个 zoomLock 属性,并将其设置为 false,以启用 dataZoom拖动功能。这样,你就可以在图表上进行拖动操作来选择特定的数据范围。 请注意,你需要将代码中的 `my-chart` 替换为你的 ECharts 实例的容器元素的 ID,并根据你的数据结构和需求进行相应的修改。另外,你可以根据需要调整 dataZoom 的其他属性,如 start、end 等来控制初始的可视化数据范围。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

holden丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值