使用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调用(围绕参数缺少引号),但是遵循该建议会导致它完全失败.
解决方法
首先你为什么要用两次超时?它看起来像我的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);
原文地址:https://www.jb51.cc/js/152373.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。