首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >document.onmousemove延迟

document.onmousemove延迟
EN

Stack Overflow用户
提问于 2010-12-15 05:44:08
回答 1查看 1.1K关注 0票数 1

我正在尝试建立一个昂贵的脚本与鼠标和键盘控制的画布。我使用document.onmousemove和document.onkeydown/onkeyup来做这个控制,但是当我按下任何一个按钮时,我得到了很多"onkeydown“的执行,并且鼠标非常慢。它看起来像是“只写鼠标位置缓冲区”之类的东西。当我松开这个键时,鼠标就会“模拟”我之前的动作。我在Firefox和chrome上测试过,这个问题只存在于FF上。

下面是一些代码

代码语言:javascript
复制
    document.onmousemove  = function(e){
        obj = canvas;
        var curleft = curtop = 0;

        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);

        mX = e.pageX - curleft;
        mY = e.pageY - curtop;
    }

    var dt=0.02;
    setInterval(tick, dt*1000);
    update(dt);
    function tick() {

        if((!pause) || step)
        {
            update(dt);
            step = false;
        }
        interact();
        draw();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-15 05:53:05

根据您的updateinteractdraw函数的复杂程度,20ms的计时器间隔可能太短,并占用大量的CPU时间。由于JavaScript在单个线程中运行,因此这可能会阻止脚本处理鼠标事件。

这些事件可以在浏览器的输入队列中排队,然后被分派到你的脚本中(这可能在Firefox中发生),或者如果你的脚本没有足够快地处理它们,它们可能会被丢弃(这可能在Chrome中发生)。

一些可能的解决方法:

  1. 增加使用setInterval的计时器interval.
  2. Instead,在每次执行tick之后尝试使用setTimeout --这将防止多个计时器事件排队并一起触发。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4444558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档