微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);

原文地址:https://www.jb51.cc/js/152373.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐