h5中echarts图表,增加双指缩放功能,支持区域缩放

起因:在h5的echarts中,数据量过多,增加了dataZoom,但是折线图依然不美观。产品希望通过双指移动事件,显示折线图的数据。

解决:

1、echarts保留dataZoom,但是将height设置为0,start是0,end是100。

2、使用检测触摸手势的js库:hammer.js,检测手势。

3、监听手势,获得双指移动的缩放比例,更新echarts 的 dataZoom 范围。

index.html
<script src="https://cdn.bootcdn.net/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>
<template>
  <div ref="main" class="w-100% h-100%" />
</template>

<script setup>
// 按需引入 echarts
import * as echarts from "echarts";

const main = ref(); // 使用ref创建虚拟DOM引用,使用时用main.value

onMounted(() => {
  init();
  setOptions();
});

let myChart = null;

const init = async () => {
  await nextTick();
  // 基于准备好的dom,初始化echarts实例
  myChart = echarts.init(main.value);
};

let option;
const setOptions = () => {
  if (props.isZoom) {
    option.dataZoom = [
      {
        height: 0,
        start: 0,
        end: 100,
        showDataShadow: true, //组件中显示数据阴影
        showDetail: false, //拖拽时候显示详细数值信息
        borderColor: "transparent", //组件边框颜色
        dataBackground: {
          lineStyle: {
            color: "#00b48c",
            type: "solid",
            join: "round",
            opacity: 1,
          },
          areaStyle: {
            color: "rgba(0, 214, 174, 0.49)",
          },
        }, //数据阴影的样式
        fillerColor: "transparent", //选中范围的填充颜色
        selectedDataBackground: {
          lineStyle: {
            color: "#00b48c",
            type: "solid",
            join: "round",
            opacity: 1,
          },
          areaStyle: {
            color: "rgba(0, 214, 174, 0.49)",
          },
        }, //选中部分数据阴影的样式
        handleStyle: {
          borderColor: "#00b48c",
          color: "#ffffff",
        }, //两侧缩放手柄的样式配置
        moveHandleSize: 0,
        moveHandleStyle: {
          color: "#00d4b7",
          opacity: 0.49,
        }, //移动手柄的样式配置
        emphasis: {
          handleStyle: {
            borderColor: "#00b48c",
          },
          moveHandleStyle: {
            color: "#00d4b7",
            opacity: 0.49,
          },
        },
      },
    ];
  }
  // 使用指定的配置项和数据显示图表
  myChart.setOption(option);
  onTouch();
}

const onTouch = () => {
  const hammer = new Hammer(main.value);
  hammer.get("pinch").set({ enable: true });
  hammer.on("pinch", (event) => {
    const scale = event.scale; // 获取缩放比例
    if (scale <= 0.5) return //缩放比例不足0.5,不调整范围

    // 根据缩放比例调整 dataZoom 的范围
    const start = Math.max(0, 100 - scale * 100); // 计算起始位置
    const end = Math.min(100, scale * 100); // 计算结束位置

    // 更新 echarts 的 dataZoom 范围
    myChart.dispatchAction({
      type: "dataZoom",
      dataZoomIndex: 0, // 指定dataZoom组件的索引,如果有多个dataZoom组件可以根据实际情况设置
      start, // 设置dataZoom的起始位置
      end, // 设置dataZoom的结束位置
    });
  });
};
</script>

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip 基于echarts封装的H5移动端、门户网站股票行情图表合集(分时图、K线图、MACD等技术指标附图).zip
H5 echarts 设置 dataZoom 后无法左右滑动的原因可能有以下几种: 1. dataZoom 的 `throttle` 参数设置过大,导致滑动事件响应不及时。可以尝试将 `throttle` 参数设置为较小的值,例如 50ms。 2. 页面存在其他元素或脚本阻止了 dataZoom 的滑动事件。可以检查页面是否有其他元素覆盖在 dataZoom 上,或者其他脚本修改了 dataZoom 的行为。 3. dataZoom 的 `orient` 参数设置不正确,导致无法滑动。可以尝试将 `orient` 参数设置为 'horizontal',确保 dataZoom 是水平方向的。 4. dataZoom 的 `start` 和 `end` 参数设置不正确,导致无法滑动。可以尝试将 `start` 和 `end` 参数设置为合适的值,确保 dataZoom 能够滑动到需要的位置。 以下是一个示例代码,展示了如何在 H5 使用 echarts 设置 dataZoom,同时解决左右滑动无效的问题: ```javascript option = { xAxis: { type: 'category', data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }, yAxis: { type: 'value' }, series: [{ type: 'bar', data: [120, 200, 150, 80, 70, 110, 130] }], dataZoom: [{ type: 'slider', start: 0, end: 50, throttle: 50, orient: 'horizontal' }] }; ``` 以上代码,我们设置了 dataZoom 的 `throttle` 参数为 50ms,确保滑动事件响应及时;同时设置了 dataZoom 的 `orient` 参数为 'horizontal',确保 dataZoom 是水平方向的。如果以上方法仍然无法解决问题,可以尝试检查页面是否存在其他影响 dataZoom 滑动的因素。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值