使鼠标拖曳拖动发生在requestAnimationFrame内部是否有用?

问题描述 投票:2回答:1

我有一个拖动库,可在每次鼠标移动时移动元素。众所周知,mousemove经常触发,因此迫使浏览器重新绘制。这可以通过在requestAnimationFrame中实际移动来解决。

这是有用的吗?它会提高性能并减少油漆事件吗?有没有我想到的问题?

javascript draggable requestanimationframe
1个回答
0
投票

取决于浏览器和用例。

现在asked by the specs浏览器确实将自己的UI事件(其中包括鼠标事件)设置为阈值。

鼓励实施人员确定最佳频率,以使响应速度与性能保持平衡。

Chrome和Firefox这样做,仅在requestAniamtionFrame回调触发之前,才以屏幕刷新率触发这些事件。因此,在这些浏览器中,这样做不会赢得任何好处,但也不会造成太多损失。

Safari仍然会触发与设备发出的事件一样多的事件,因此在此浏览器中,您将通过保持自己的阈值而获胜。

注意,如果您希望释放此阈值,则将need to use指针事件代替。]]


现在,这对于避免无用的计算将被下次绘制之前

丢弃的事物很有用。painting将始终被限制为屏幕的刷新率(在requestAnimationFrame callbacks触发之后)。因此,由您决定是否要应用该阈值。例如,尽可能快地更新点列表可能有意义,但是要等待requestAnimationFrame回调实际上进行DOM更改或绘制任何内容。

从您对案件的描述开始,看来您确实可以通过等待requestAnimationFrame

回调而获胜,只是因为您可能正在修改CSSOM的框模型。
© www.soinside.com 2019 - 2024. All rights reserved.