js鼠标移动事件优化

js鼠标移动事件

  • 在开发过程中mousemove会带来操作的卡顿。比如我之前做的一个节点拖动的功能。当节点比较少的时候拖动还是非常的流畅,但是当节点达到2000-3000个时,拖动就会相当的卡顿甚至是无法操作。
    - 那么mousemove事件为什么效率低下呢?
    - mousemove当鼠标一个像素的时候就会触发事件,那么当我们快速移动的时候,mousemove触发的次数是相当多的,而这么多的触发给我们日常开发是没有必要的。
    - 所以为了提高效率,我这里的一个方法是减少触发的次数,或者说在一定时间内只触发一次。
    - 人可以识别的帧数是有限的,所以在很短的时间内只触发一次也会让人感觉是连贯的,但mousemove触发的次数却极大的减少了。
    - 下面的代码中我选择使用一个定时器,在每次触发mousemove之后,将该事件设置为null,等待一段时间后再设置为move函数。
    - 由于当我们鼠标松开时,有可能正处于Timeout中间,所以在松开时,首先要将定时器停止。
var timeOutId = null;
var move = function(){

      ...

      div.onmousemove = null;
      timeOutId = setTimeout(function(){
            div.onmousemove = move;
      }, 30);
}
div.onmouseup = function(){
      clearTimeout(timeOutId);
      div.onmouseup = div.onmousemove = null;
}
posted @ 2020-08-25 10:04  yangzixiongh  阅读(2278)  评论(0编辑  收藏  举报