javascript - 覆盖 div 不会阻止在特定时间窗口中触发的下一个事件

标签 javascript jquery html css

在我的应用程序中,我添加了一个 loaderDiv 来避免页面上的所有用户事件。

加载程序出现。如果用户强制执行 clickevent(例如 greenContainer onclick),该事件将在加载器 div 消失后触发。

我创建了一个简短示例来向您展示问题

js:

function appendOverlay(){
    var maskDiv = $('<div id="overlay" class="loadmask" onclick:"return false;"><div class="removeDiv" onclick="sleep(3000)"><span>click to remove overlay after 3 seconds</span></div></div>');
        $('body').append(maskDiv);
    }

    function removeDiv(){
        $("#overlay").remove();
    }

    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
      removeDiv();
    }

Demo

我该如何解决这个问题?


使用 setTimeout(removeDiv(),0) 解决了这个问题。 这是 Javascript 中事件循环执行的问题。

removeDiv() 应用到下一个 tick,首先执行 userEvent onClick()

Why is setTimeout(fn, 0) sometimes useful?

The JavaScript Event Loop

最佳答案

那里有奇怪的“ sleep ”功能。 你为什么不使用内部超时:

function sleep(milliseconds) {
    setTimeout(function() {
         removeDiv();   
    }, milliseconds);
}

DEMO

关于javascript - 覆盖 div 不会阻止在特定时间窗口中触发的下一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952141/

相关文章:

javascript - 为什么在 DOM 树的头节点和正文节点之间有一个文本节点?

javascript - react /预 react : how to temporarily avoid updating the DOM for a certain component?

javascript - 函数调用正在堆积

javascript - 在悬停时更改背景位置 - jquery

jquery - Bootstrap Datepicker无法设置开始/结束日期

html - 垂直滚动文本问题

javascript - 将所有按钮扔到 div,除了两个

javascript - Next Js 服务端 Api 读写 JSON

javascript - 使用 AJAX 和 PHP 登录时获取用户配置文件

javascript - 如何使 TR/TD 在 html 中不动?