快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)

yizhihongxing

基本概念

快速移动鼠标触发问题是指在一些情况下,当用户在浏览器界面上快速移动鼠标时,会触发一些意料之外的行为。而 ECharts 在外部调用、保存为图片操作及工作流接线等情况下也可能出现这个问题。

问题产生原因

快速移动鼠标触发问题产生的原因是因为浏览器支持一种称为“快速点击”的机制,就是当用户快速移动鼠标时,会先生成一个 mouseenter 事件,然后通过快速的移动鼠标和点击触发出多次 mouseentermouseleave 事件同时出现。如果外部调用 ECharts 时未进行相应处理,就会出现不可预见的结果。

解决方法

为了避免这种情况,可以通过以下两种方法解决快速移动鼠标触发问题。

方法一

可以在 option 配置项中声明 silent 属性为 true 来避免默认触发 mouseentermouseleave 事件,这种方式适用于 ECharts 内部调用情况。

示例代码:

option = {
  tooltip: {
    show: true
  },
  series: {
    type: 'scatter',
    data: [...],
    silent: true // 禁止默认鼠标事件
  }
};

方法二

另一种方法是在外部调用 ECharts 时,覆盖掉原始的 dispatchAction 方法,进行相应的处理来避免快速移动鼠标触发问题。

示例代码:

var myChart = echarts.init(document.getElementById('main'));
myChart.setOption(option);

myChart.getZr().on('mousedown', function () {
  // 通过覆盖原生的 dispatchAction 方法来避免快速移动鼠标触发问题
  myChart.getZr().handler.dispatchAction = function (payload, silent) {
    silent = typeof silent === 'undefined' ? false : silent;

    if (payload) {
      var originalDispatch = function () {
            myChart.getZr().handler.origDispatchAction.call(myChart.getZr().handler, payload, silent);
      };

      if ((payload.type === 'highlight' || payload.type === 'downplay')
          && payload.seriesIndex != null) {
        originalDispatch();
      } else if (payload.type === 'select' || payload.type === 'mapSelect'
          || payload.type === 'mapUnSelect' || payload.type === 'geoSelect'
          || payload.type === 'geoUnSelect') {
        originalDispatch();
      } else if (payload.type === 'mouseout' || payload.type === 'globalout') {
        originalDispatch();
      } else {
        // 避免快速移动鼠标触发问题,通过 setTimeout 延时处理
        setTimeout(originalDispatch, 1000 / 60);
      }
    }
  };
});

方法二会通过覆盖 dispatchAction 方法来解决快速移动鼠标触发问题,其中 setTimeout 的延时时间可以自行设置,建议设置为 16ms(即一个浏览器渲染帧的时间)或者更短的时间。

总结

以上就是解决快速移动鼠标触发问题的两种方法,可以根据具体情况选择使用。方法一适用于 ECharts 内部调用,方法二适用于外部调用。需要注意的是,方法二需要在覆盖 dispatchAction 方法时进行相应的处理,否则会出现不可预见的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS实现梯形标签页的方法

    CSS实现梯形标签页的方法,可以通过以下步骤实现。 1. 确定页面布局 在 HTML 页面中,我们需要确定标签页所在的位置和布局。可以在一个容器中放置多个标签页,每个标签页对应一个内容区域。在本示例中,容器为 <div class=”tab-container”>,而标签页则是由 <div class=”tab”> 元素和 <d…

    css 2023年6月9日
    00
  • vue项目引入字体.ttf的方法

    这里提供 Vue 项目中引入 .ttf 字体文件的完整攻略。 一、将字体文件添加到 Vue 项目中 在 Vue 项目中引入自定义字体文件,需要先将字体文件添加到项目中。可以将 .ttf 文件放置在项目的 assets/fonts 文件夹中。 二、在项目中引入字体文件 可以在 main.js 中引入字体文件,并全局注册,也可以在组件中单独引入。 1. 在 ma…

    css 2023年6月9日
    00
  • 什么是@font-face及font-face如何在css中使用

    以下是“什么是@font-face及font-face如何在CSS中使用”的完整攻略: 什么是 @font-face @font-face 是 CSS3 中的一个规则,它允许网页设计者使用自定义字体,而不必依赖于用户的操作系统中已安装的字体。通过 @font-face 规则,可以将自定义字体文件加载到网页中,并在 CSS 中使用它们。 font-face 如…

    css 2023年5月18日
    00
  • 以淘宝前端为例剖析HTML5与移动端页面的性能优化

    以淘宝前端为例剖析HTML5与移动端页面的性能优化 1. HTML5的语义化结构 在HTML5中,我们可以使用语义化标签来描述页面的结构。这些标签不仅可以使代码更加清晰易懂,还能提高搜索引擎的识别能力,从而提高网站的SEO排名。在淘宝前端中,大量使用了语义化标签,例如:header、nav、section、aside等。这些标签不仅有利于搜索引擎优化,还能提…

    css 2023年6月11日
    00
  • 间距浮动与对齐的最佳方案

    关于“间距浮动与对齐的最佳方案”,其实是针对页面布局中的一些常见问题,在处理页面元素之间的对齐和间距时可以采用的一种优化方案。下面我将逐步讲解这个过程。 1. 了解间距浮动的概念 间距浮动(Margin Collapsing)指的是相邻两个盒子的上下外边距(margin)会出现折叠或合并,导致一些意想不到的结果。间距浮动会导致一些盒子之间的间距难以调整,甚至…

    css 2023年6月9日
    00
  • CSS水平居中总结(新手必看篇)

    CSS水平居中是前端开发中常见的布局需求,对于新手来说可能较为困难。因此,本篇文章就为大家总结一下CSS水平居中的方法和技巧。 方法一:使用text-align属性 在CSS中,使用text-align属性可以实现文字水平居中的效果。但是,这个属性也同样适用于块级元素。我们可以将其设置为”center”,就可以实现容器内部所有块级元素水平居中。 .conta…

    css 2023年6月11日
    00
  • 浅谈移动端适配大法

    浅谈移动端适配大法 移动端的屏幕大小多种多样,如何让页面在不同尺寸的移动设备上都有良好的显示效果,是前端开发者需要考虑的问题之一。本文将介绍几种常用的移动端适配方案,希望对读者的移动端开发工作有所帮助。 方案一:Viewport单位 Viewport是指浏览器显示内容的区域,通常设备的物理分辨率会远高于Viewport的分辨率。Viewport单位就是相对于…

    css 2023年6月10日
    00
  • 详解Bootstrap 学习(一)入门

    详解Bootstrap 学习(一)入门 Bootstrap是一个流行的前端框架之一,能够提高网页开发的效率,本篇文章将带领初学者入门Bootstrap。 第一步:下载并引入Bootstrap 我们可以前往Bootstrap官网下载文件,也可以使用CDN链接引入。 <!– 引入CDN链接 –> <link rel="styles…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部