首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><Div>未在睡眠方法之前显示

<Div>未在睡眠方法之前显示
EN

Stack Overflow用户
提问于 2017-07-10 17:21:19
回答 2查看 68关注 0票数 0

我有一个

代码语言:javascript
复制
   <div id="myModal" class="modal">
        <div class="modal-content">
            <span class="close">&times;</span>
                <font size="6">
                    <p>Message Text</p>
                </font>
        </div>
    </div>

我试着让这条消息在点击按钮后出现,然后睡觉2-3秒,然后继续执行代码,但我得到的是睡眠2-3秒,然后显示消息,我的页面在设置好后重新加载。

在我的按钮单击事件:

代码语言:javascript
复制
$("#ButtonID").click()
{
 if (validate stuff) {//code here}
 else {modal.style.display = "block"; sleep(3);}
}

我从堆叠溢出的某个地方抓到的睡眠功能

代码语言:javascript
复制
function sleep(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
}

这里我想要的是,当我点击div显示的按钮,然后等待3秒,它就会保存代码,就像它做的那样,然后返回到同一个页面,因为我在这里得到的是睡眠3秒,显示div,然后它几乎立即刷新我的页面,这样就没有时间看到预期的消息了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-10 17:26:21

您阻塞浏览器线程3秒,所以它无法绘制更新,直到完成。

简单的规则是:从不阻止浏览器线程

每当你发现自己有这样的事情时:

代码语言:javascript
复制
doSomething();
wait3Seconds();
doSomethingElse();

你真正想要的是:

代码语言:javascript
复制
doSomething();
setTimeout(doSomethingElse, 3000);

也就是说,将代码排在3秒后运行,而不是试图将所有内容阻塞3秒。阻塞是不好的。

票数 2
EN

Stack Overflow用户

发布于 2017-07-10 17:26:27

应该使用setTimeout来完成

代码语言:javascript
复制
$("#ButtonID").click(function()
{
     setTimeout(function() {
       if (validate stuff) {//code here}
       else {modal.style.display = "block";}
     }, 3000);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45018145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档