【问题标题】:Is mousemove event fire once in per frame?mousemove 事件是否每帧触发一次?
【发布时间】:2017-07-04 06:11:43
【问题描述】:

在这个fiddle demo中,按下并移动鼠标将根据鼠标的位置绘制圆点。 draw 方法是监听mousemove 回调,但它绘制离散点,表明mousemove 事件没有连续触发。

更重要的是,我收集event.timeStamp 并登录控制台。我发现相邻事件之间的偏移接近 16.7ms。那么mousemove 事件是否每帧触发一次?

【问题讨论】:

  • 只是为了添加一个数据点,我在 Firefox 和 Arch Linux 上 Gnome 上的 Chromium 上的 60 Hz 监视器上正好有 60 个鼠标移动事件,如果你想做高质量的绘画,这真的是个问题在浏览器中。

标签: javascript jquery google-chrome mouseevent dom-events


【解决方案1】:

mousemove 事件频率是特定于实现的,没有任何规范定义。

当指针设备在元素上方移动时,用户代理必须调度此事件。指针设备移动时的事件频率是特定于实现、设备和平台的,但是应该为持续的指针设备移动触发多个连续的 mousemove 事件,而不是针对每个鼠标移动实例触发一个事件。鼓励实施确定最佳频率,以平衡响应能力和性能。

-- UI Events, W3C Working Draft, 04 August 2016

某些平台上的某些浏览器完全有可能将其限制为每帧一次。但是,不能保证任何可能这样做的浏览器会继续这样做。

如果要绘制连续线,则需要在每两点之间创建插值数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多