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

基本概念

快速移动鼠标触发问题是指在一些情况下,当用户在浏览器界面上快速移动鼠标时,会触发一些意料之外的行为。而 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日

相关文章

  • VScode格式化ESlint方法(最全最好用方法)

    VScode格式化ESlint方法(最全最好用方法) 简介 ESLint是一个可插入的静态代码分析工具,用于识别和报告模式中的问题。它是在 ECMAScript/JavaScript 代码中寻找问题的。代码分析是将源代码(特定于编程语言的)表示转换为一种表示,以便更容易分析代码并找到缺陷。 VScode是一款非常流行的轻量级代码编辑器,拥有丰富的插件生态系统…

    css 2023年6月9日
    00
  • base64图片在各种浏览器的兼容性处理

    base64图片是通过将图片数据转换成base64编码字符串的方式,来实现在网页上展示图片的技术。但是由于不同浏览器的实现方式和支持程度不同,可能导致在某些浏览器中无法正常地显示base64图片,并且这也会影响网页的兼容性和用户体验。 针对这个问题,我们可以采用如下策略来处理base64图片的兼容性问题: 1. 使用CSS sprite技术 CSS Spri…

    css 2023年6月13日
    00
  • Prototype中dom对象方法汇总

    Prototype中dom对象方法汇总 在Prototype的库中,有很多强大的DOM操作方法,本攻略将会对这些方法进行汇总、分类,并给出详细的实例说明。 1. DOM元素选取 1.1 $$方法 $$方法是Prototype的一个强大的DOM元素选取方法,可以选取符合所有CSS选择器的所有元素,返回一个数组对象。其语法如下: $$(‘CSS选择器’) 示例代…

    css 2023年6月10日
    00
  • CSS实现兼容性的渐变背景(gradient)效果兼容众多浏览器

    实现兼容性的渐变背景效果是Web前端开发中一个比较重要的课题,因为不同的浏览器对于CSS3渐变背景效果的支持程度不太一样,有些浏览器并不支持CSS3的渐变背景效果,因此需要我们进行一定的兼容性处理。下面是一个实现CSS兼容性的渐变背景效果的攻略,供大家参考: 一、背景知识 CSS3渐变背景效果 CSS3渐变背景是一种使用简单的CSS语法来实现渐变效果的技术,…

    css 2023年6月9日
    00
  • @keyframes规则实现多重背景的CSS动画

    当我们想要在CSS中实现多重背景的动画效果时,可以使用CSS的@keyframes规则。下面是一个标准的@keyframes规则的语法格式: @keyframes animation-name { 0% { /* 这里是动画起始状态的属性值 */ } 100% { /* 这里是动画结束状态的属性值 */ } } 这里的animation-name是指动画的名…

    css 2023年6月9日
    00
  • 5分钟教你学会超简单的html+css魔幻霓虹灯文字特效

    你好!关于“5分钟教你学会超简单的html+css魔幻霓虹灯文字特效”的攻略,下面给出详细的步骤说明。 一、所需基础知识 HTML基础语法 CSS基础语法 一些基础的CSS动画知识 二、步骤说明 1. 创建HTML文件 在任何文本编辑器中打开一个新文件,然后将以下代码复制到文件中。这是一个最基本的HTML骨架 <!DOCTYPE html> &l…

    css 2023年6月9日
    00
  • easyui Draggable组件实现拖动效果

    来讲解一下 easyui Draggable 组件的使用攻略。 简介 Draggable 是 easyui 中的一个拖动组件,它可以给页面中的任意元素添加拖动功能,支持鼠标和触摸屏两种操作方式。使用 Draggable 组件可以很方便地实现一些拖动、排序、调整位置等功能。 基本用法 Draggable 组件的调用方式如下: <div id="…

    css 2023年6月10日
    00
  • 移动端前端适配方案(总结)

    移动端前端适配方案(总结) 1. 为什么需要移动端适配? 在PC端开发中,我们通常使用px做为长度单位进行开发,因为PC端屏幕大小不会随着设备变化而变化,因此使用固定的像素单位长度并不会影响网站的显示效果。然而在移动端,因为移动设备的屏幕尺寸各异,因此使用固定像素的方式进行设计和开发,可能会导致在不同设备上出现内容偏大或偏小,影响用户体验。 因此,为了在移动…

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