javascript - 在 setTimeout 回调函数中保留 event.clientX 值

标签 javascript events closures dom-events

我有一个名为 onmouseover 的例程。我希望有一个轻微的延迟 - 即在效果发生之前给用户时间 mouseout 。该效果使用 event.clientX 值。然而,在调用回调时(500 毫秒后),event 对象似乎已不存在。我怎样才能巧妙地保持 event.clientX 的状态?

function showTip(sDivID){
    SHOW_TIP_TIMEOUT_ID = setTimeout(function(){
        var div = $('#'+sDivID).show()[0];
        div.style.left = event.clientX;
    } ,500)
}

最佳答案

如果您依赖于此仅在 Internet Explorer 中工作,您可以在设置超时之前保存该值:

function showTip(sDivID) {
  var x = event.clientX;
  SHOW_TIP_TIMEOUT_ID = setTimeout(function() {
    var div = $('#' + sDivId).show()[0];
    div.style.left = x;
  }, 500);
}

如果您希望它适用于其他浏览器,您必须在事件处理程序本身中获取事件并将其传递或将其存储在全局 (ick) 中。由于您使用的是 jQuery,它已经为您完成了所有浏览器规范化工作,因此您应该利用它。

关于javascript - 在 setTimeout 回调函数中保留 event.clientX 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203766/

相关文章:

javascript - JavaScript 的 trimLeft() 与 trimStart() 之间的区别

php - 是否可以触发数据库更改并在 Laravel 中触发事件?

javascript - JavaScript 中的闭包并运行一次函数

循环内的 JavaScript 闭包 – 简单的实际示例

python - 如何强制 Python 在循环内创建新变量/新范围?

Javascript Integer 对象未定义

javascript - ES6 生成器 : poor stack trace from iterator. 抛出(错误)

database - 在cakephp 2.x甚至函数中将数据保存在数据库中

python - Qt - 暂时禁用所有事件或窗口功能?

javascript - 在不知道宽度的情况下将元素置于其上的居中