Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在两次风格变化之间睡觉_Javascript_Html_Css - Fatal编程技术网

Javascript 在两次风格变化之间睡觉

Javascript 在两次风格变化之间睡觉,javascript,html,css,Javascript,Html,Css,我正在用Javascript做一个Simon游戏。我希望当我显示颜色序列时,做一个睡眠,然后我将不透明度更改为0.3,然后再次睡眠,并将颜色的不透明度更改为1。 但是当我尝试时,它不睡觉,只在我发出警报或暂停执行时等待 我的代码是: for(x = 0; x < cicleCount.length; x++) { cicleCount[x] = colors[Math.floor((Math.random() * colors.length))]; sleep(1000);

我正在用Javascript做一个Simon游戏。我希望当我显示颜色序列时,做一个睡眠,然后我将不透明度更改为0.3,然后再次睡眠,并将颜色的不透明度更改为1。 但是当我尝试时,它不睡觉,只在我发出警报或暂停执行时等待

我的代码是:

for(x = 0; x < cicleCount.length; x++) {
    cicleCount[x] = colors[Math.floor((Math.random() * colors.length))];
    sleep(1000);
    document.getElementById(cicleCount[x]).style.opacity = 1;
    sleep(1000);
    document.getElementById(cicleCount[x]).style.opacity = 0.3;
}
(x=0;x{ ciclecont[x]=colors[Math.floor((Math.random()*colors.length)); 睡眠(1000); document.getElementById(cicleCount[x]).style.opacity=1; 睡眠(1000); document.getElementById(cicleCount[x]).style.opacity=0.3; } My sleep()函数:

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}
函数睡眠(毫秒){
var start=new Date().getTime();
对于(变量i=0;i<1e7;i++){
如果((新日期().getTime()-start)>毫秒){
打破
}
}
}

我也尝试使用setTimeout(),但它不起作用,它只是不停地执行所有代码。

这不是浏览器环境中的工作方式。在执行Javascript函数期间,浏览器显示将不会刷新

此外,在一段JavaScript代码中“睡眠”基本上会冻结页面。在代码执行完毕之前,浏览器不会对用户输入或其他事件做出响应,这极有可能会惹恼浏览者

您必须使用计时器使更改可见,以便在不同的计时器调用之间更新页面。

您使用sleep()的方法被调用,这不是一个好主意,因为它会导致不必要的CPU负载,对于JavaScript,它会阻塞UI线程

如果您需要,则在设定的时间后运行回调(函数)

如果没有看到您在Window.setTimeout上的失败尝试,我将无法提供有关该操作失败原因的更多信息。请更新您的问题

不过,我想您最好使用window.setInterval()和某种时钟,然后可以使用它来增加透明度。在下面的代码中,如果我做对了,x应该按顺序0,0,1,1,2,直到(ciclecont.length-1),不透明度应该切换为1,0.3,1,0.3等等

var clock = 0;
var tick = function() {
   var x = (clock / 2) % cicleCount.length;
   cicleCount[x] = colors[Math.floor((Math.random() * colors.length))];
   if (clock % 2 == 0) {
     document.getElementById(cicleCount[x]).style.opacity = 1;
   } else {
     document.getElementById(cicleCount[x]).style.opacity = 0.3;
   }
   clock++;
};
var timer = window.setInterval(tick, 1000);
如果以后需要停止动画,请使用以下命令

window.clearInterval(timer);

您可以使用setTimeout函数执行此操作:-

 window.setTimeout(function(){
    document.getElementById(cicleCount[x]).style.opacity = 1;
  },1000);
  window.setTimeout(function(){
    document.getElementById(cicleCount[x]).style.opacity = 0.3;
  },2000);

你能把所有的密码都贴出来吗?html etcIt也可以工作,不是我想要的方式,但我可以对它进行修改,谢谢。@Raxkin不用担心,很乐意帮助。