延迟javascript DOM样式的更改

延迟javascript DOM样式的更改,javascript,dom,Javascript,Dom,这是我的代码: document.addEventListener('mousedown', function (e) { bubbleDOM.style.visibility = 'hidden'; }, false); 我的问题是mousedown发生在我想要处理的链接上,这个链接是 在泡泡区里面。隐藏调用非常快,因此链接未被处理 如何延迟bubbleDOM.style.visibility='hidden'?简单的答案是可以使用setTimeout。(可能不是一个优雅的解决方案) 如

这是我的代码:

document.addEventListener('mousedown', function (e) {
  bubbleDOM.style.visibility = 'hidden';
}, false);
我的问题是mousedown发生在我想要处理的链接上,这个链接是 在泡泡区里面。隐藏调用非常快,因此链接未被处理


如何延迟
bubbleDOM.style.visibility='hidden'

简单的答案是可以使用setTimeout。(可能不是一个优雅的解决方案)


如果您正在等待某个事件发生,然后进行处理,则可以使用回调来实现它。

定义
处理链接。你所说的“链接未处理”到底是什么意思?链接应该在做什么吗?如果是的话,那么你需要的延迟取决于链接应该做什么的完成情况。您可以使用setTimeout设置计时器,但这是一种非常错误的做法。

您可以使用setTimeout延迟代码

  setTimeout('your_code', time);
e、 g:

否则,

您还可以使用javascript重定向用户,而不是延迟代码

  window.location = "http://www.google.com/";
使用setTimeout

document.addEventListener('mousedown', function (e) {
  setTimeout(function() {
    bubbleDOM.style.visibility = 'hidden';
  }, 3000); // for 3 seconds
}, false);
也可以使用setInterval进行循环检查

document.addEventListener('mousedown', function (e) {
  var checkingInterval = setInterval(function() {
    // any ways to check if the bubbleDom is loaded?
    if (bubbleDOM != null) {
      bubbleDOM.style.visibility = 'hidden';
      // stop checking
      clearInterval(checkingInterval);
    }
  }, 3000); // for 3 seconds
}, false);

setTimeout可以延迟隐藏逻辑,但它可能不会每次都工作,因为它取决于浏览器的速度,短的延迟时间可能不会触发链接单击

为什么不使用“点击”事件

document.addEventListener('click', function (e) {
    bubbleDOM.style.visibility = 'hidden';
}, false);
或者您可以在侦听器函数中执行跳转:

document.addEventListener('mousedown', function (e) {
    bubbleDOM.style.visibility = 'hidden';
    window.location = e.target.href;
}, false);

proccess意味着访问该网站(又名“a href”),是的,在这里使用设置时间是不好的做法,那么我该怎么办?当用户单击bubbleCom时,您可以从javascript本身重定向用户,使用window.location将用户发送到该链接。请参阅我的答案。在要处理的链接的onclick事件中处理该链接,而不是父元素。这是由于在各种浏览器中实现的可能冲突的事件顺序机制造成的:setTimeout(“bubbleDOM.style.visibility=‘hidden’;”,100);工作了谢谢
document.addEventListener('mousedown', function (e) {
    bubbleDOM.style.visibility = 'hidden';
    window.location = e.target.href;
}, false);