Javascript 如何在提示前更改样式

Javascript 如何在提示前更改样式,javascript,prompt,Javascript,Prompt,我正在写一个让两个玩家轮流玩的游戏。在玩家做出可行的动作之后,空白元素覆盖整个屏幕,然后出现提示,询问他们是否应该转到下一个回合。在OK点击提示后,将删除空白元素以显示游戏。 但是,提示将在可行的移动之后立即出现,而不是在样式更改之后。因此,如果用户点击OK,空白封面将永远不会出现在屏幕上。发生样式更改的唯一方法是用户在提示符下单击“取消” 有什么方法可以在样式更改后进行提示吗 只是一个示例代码 var nextTurn; cover.style.visibility='hidden'; fun

我正在写一个让两个玩家轮流玩的游戏。在玩家做出可行的动作之后,空白元素覆盖整个屏幕,然后出现提示,询问他们是否应该转到下一个回合。在OK点击提示后,将删除空白元素以显示游戏。

但是,提示将在可行的移动之后立即出现,而不是在样式更改之后。因此,如果用户点击OK,空白封面将永远不会出现在屏幕上。发生样式更改的唯一方法是用户在提示符下单击“取消”

有什么方法可以在样式更改后进行提示吗

只是一个示例代码

var nextTurn;
cover.style.visibility='hidden';
function displaySwitch(){
     if(turn == 0){
          cover.style.visibility='visible';
          nextTurn = confirm("Click OK for next turn");
          if(nextTurn == true){
               cover.style.visibility='hidden';
               turn++;
          }
     }else if(turn == 1){
          cover.style.visibility='visible';
          nextTurn = confirm("Click OK for next turn");
          if(nextTurn == true){
               cover.style.visibility='hidden';
               turn--;
          }
     }
}

可以考虑使用<代码> SETTIMEOUT(()= {…})< /代码>。这允许浏览器在继续代码之前执行一些操作(例如渲染)。请注意,如果在调用

setTimeout
后有代码,则可能会遇到问题,因此可能需要更改大量代码。(例如,)

nextTurn;
cover.style.visibility='hidden';
函数displaySwitch(){
如果(转动==0){
cover.style.visibility='visible';
设置超时(()=>{
nextTurn=提示(“单击确定下一轮”);
如果(nextTurn==true){
cover.style.visibility='hidden';
turn++;
}
});
}否则如果(圈数==1){
设置超时(()=>{
nextTurn=提示(“单击确定下一轮”);
如果(nextTurn==true){
cover.style.visibility='hidden';
转--;
}
});
}
}
...
设置超时(显示开关,0);

注意:如果您需要支持较旧的浏览器并且不进行任何预处理,请将
()=>{…}
替换为
function(){…}
,并将
替换为
var

使用setTimeout,至少50毫秒。
最好使用确认而不是提示,因为提示返回一个输入值

 if (turn == 0) {
      cover.style.visibility = 'visible';
      setTimeout(function() {
        nextTurn = confirm("Click OK for next turn");
        if (nextTurn == true) {
          cover.style.visibility = 'hidden';
          turn++;
        }
      }, 50);
    } else if (turn == 1) {
      cover.style.visibility = 'visible'
      setTimeout(function() {
        nextTurn = confirm("Click OK for next turn");
        if (nextTurn == true) {
          cover.style.visibility = 'hidden';
          turn--;
        }
      }, 50);
    }

设置超时是一个解决方案,但它不是脱口而出的证明。你可以在元素上运行一些函数来强制它同步重画自己,当你需要在动画之前应用css样式时,可以使用它,但我忘记了名称调用该函数的代码只是一个事件侦听器,用于检查页面上的点击。就我个人而言,我不同意
setTimeout()
的建议。是的,把东西包起来很容易(可能很懒),但这很少是正确的做法。IMHO为了得到充分的答案,您需要包含调用此函数的代码。很可能最好的方法是回拨或承诺。是的,我对确认/提示的事情不好。我已经确认了我的真实密码。我在想一个示例代码来说明我的问题时犯了一个错误。时间取决于你的设备性能。50毫秒就足够了。