首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用外推来解决鼠标移动事件延迟问题

使用外推来解决鼠标移动事件延迟问题
EN

Stack Overflow用户
提问于 2012-10-08 21:08:08
回答 2查看 1.6K关注 0票数 4

在这个网站上搜索之后,我发现我无法控制浏览器的mousemove事件频率。

所以我想应用某种外推方法来解决滞后的mousemove事件问题。

mousemove事件被触发时,我记录每个鼠标位置,并计算加速度(利用有限差分获得速度,然后计算加速度)。

在此之后,在render()函数中,我测量了自上次render()函数调用以来所经过的增量时间。最后,我用加速度和dt来推断位置。

但我看不到使用这种方法有任何显着的效果。有什么问题吗?

编辑:我在这里做了一个小的运行示例。(抱歉,问题陈述不清楚)

https://gist.github.com/3858124

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-09 20:01:15

就在我把代码粘贴到要点上之后,我意识到了这个问题,然后修复了这个bug。

问题是:

我使用NDC坐标来计算导数,而我使用世界空间坐标来进行外推。

这是新的代码:

https://gist.github.com/3858277

结论:对滞后的mouseevent有一定的影响,但影响不大。作为一个(不好的)副作用,当你的鼠标移动进行紧急刹车时,会出现过冲。

我仍然在寻找一个更好的解决方案。欢迎任何意见/建议。谢谢。

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 20:09:59

我不确定你是否会用外推法做得更好。当前所有的浏览器都为javascript维护一个线程,它可以是每个标签页(Chrome)或每个浏览器窗口(Firefox)。因此,如果你在你的脚本中工作,当你的脚本运行时,浏览器根本不会触发鼠标移动事件。

因此,提高mousemove更新频率的最好方法是优化您的其他javascript,以摆脱mousemove事件的影响。一种方法是使用更多的异步调用。因此,您可以编写代码以使用循环的下一步调用setTimeout(nextFunc, 0),这将从脚本传回控制权,并允许在循环的下一步之前触发事件。

*单线程和同步计算规则的例外是WebWorkers,它允许您与其余执行并行执行特定的一组事情,主要是那些不涉及DOM的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12782418

复制
相关文章

相似问题

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