使用 setTimeout 和 if 来控制对象 (Javascript)

Use setTimeout and if to control objects (Javascript)

练习时遇到问题Javascript。我想制作一个可以点击的正方形。单击后,方块消失并在 3 秒后显示。代码如下

document.getElementById("box").addEventListener("click",function(){
    this.style.display="none";
});


if (document.getElementById("box").style.display=="none"){
    setTimeout(function(){
        document.getElementById("box").style.display="block";
    }, 3000);
}

这是一个JS Bin
那么如何更正上面的代码呢? setTimeout.

好像有问题

取出你的if语句:

document.getElementById("box").addEventListener("click",function(){
   this.style.display="none";
   setTimeout(function(){
       document.getElementById("box").style.display="block";
   }, 3000);
});

永远不会设置 setTimeout 函数,因为当页面加载时您的 "box" 没有隐藏...

你的代码是这样写的:

框被点击时,隐藏它,但是现在,在它被点击之前,看它是否被隐藏(提示:不会,因为它还没有被点击),如果是,则在三秒后显示。


将代码从 if 语句中移出并移至点击函数处理程序中。

完全删除 if 语句(因为您知道它在单击后会是什么状态)。

您需要在事件监听器中设置超时时间

document.getElementById("box").addEventListener("click",function(){
    this.style.display="none";

    setTimeout(function(){
        this.style.display="block";
    }, 3000);

});

像这样更改您的代码以获得您的结果,正如@quentin 所说。

document.getElementById("box").addEventListener("click",function(){
    this.style.display="none";
    setTimeout(function(){
        this.style.display="block";
    }, 3000);}
});

如果将 3 秒超时代码移动到侦听器中,它会正常工作:

document.getElementById("box").addEventListener("click",function(){
    this.style.display="none";

    setTimeout(function(){
        document.getElementById("box").style.display="block";
    }, 3000);
});