我试图找出一种简洁的方法来聚合mousemove事件,以便我确保我的代码被调用,但每250-300毫秒只能调用一次.
我曾考虑使用类似下面的内容,但想知道是否有更好的模式,或者jQuery提供的东西会做同样的事情:
- var mousemove_timeout = null;
- $('body').mousemove(function() {
- if (mousemove_timeout == null) {
- mousemove_timeout = window.setTimeout(myFunction,250);
- }
- });
- function myFunction() {
- /*
- * Run my code...
- */
- mousemove_timeout = null;
- }
编辑:下面接受的答案将完全适用于这种情况,但是,我发现答案中提供的mousestop()功能实际上消除了我对聚合的需求,所以如果你正在阅读这个问题并寻找答案,请参阅如果mousestop插件是你真正需要的!
解决方法
您的代码很好,除非您在将其设置为null之前应该是
clear the timeout,否则它可能会泄漏:
- window.clearTimeout(mousemove_timeout);
- mousemove_timeout = null;
作为替代方案,您可以将mousemove / mousestop与window.setInterval结合使用
- var timer = null;
- var isIntervalSet = false;
- $('body').mousemove(function() {
- if (isIntervalSet) {
- return;
- }
- timer = window.setInterval(function() {
- /*
- * Run my code...
- */
- },250);
- isIntervalSet = true;
- }).mousestop(function() {
- isIntervalSet = false;
- window.clearTimeout(timer);
- timer = null;
- });