Javascript setTimeout函数调用与事件参数?

前端之家收集整理的这篇文章主要介绍了Javascript setTimeout函数调用与事件参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用setTimeout时,最好的方法是拉入事件对象?我正在使用jQuery处理在所有浏览器中归一化事件模型,但是我不知道如何将’e’对象放在checkPos函数中.

我当前的代码

function MouseDownEvent(e) {
    *snip*
    timeoutID = setTimeout(checkPos(e),500);
}
function checkPos(e) {
    //function uses e on a timeout of 500ms
    timeoutID = setTimeout( checkPos(e) },500);
}

目前该代码的作用是因为该函数在mousedown事件中被调用,但是在用户移动鼠标时不会更新e对象. FF JavaScript错误控制台还声明它是一个无用的setTimeout调用(围绕参数缺少引号),但是遵循该建议会导致它完全失败.

如何从setTimeout调用提取’e’事件参数?

编辑:在每500ms重新运行checkPos函数代码添加

解决方法

首先你为什么要用两次超时?它看起来像我的setInterval()会更好
function MouseDownEvent(e) {
 *snip*
 clearInterval(intervalID);
 intervalID = setInterval(function(){checkPos(e);},500);
}

其次你可以澄清一下:“…但是不要在用户移动鼠标时更新e对象.”当用户移动鼠标时,为什么会更新事件对象?你只分配一个mouseDown处理程序.如果你想在每个鼠标移动上做一些事情,那么你应该使用一个mouseMove事件,在这种情况下,超时/间隔将是不必要的.

function MouseMoveEvent(e) {
 //called every time the mouse is moved,event object will contain position
}

和JavaScript一样,您应该首先查找一个事件驱动的解决方案,并且只有当您绝对需要时才使用定时处理程序.

*编辑 – 解决注释中提出的问题*

var handler = {
    i : 0,function : mouseMoveEvent(e) {
      handler.i++;
      if (handler.i % 100 == 0) {
        //Do expensive operations
      }
    }
}

$(myElement).bind("mousemove",handler.mouseMoveEvent);

猜你在找的JavaScript相关文章