【发布时间】:2020-01-22 06:17:30
【问题描述】:
有人能解释一下为什么没有 setTimeout 下面的代码就不能工作吗?
<html>
<script src="js/jquery.js"></script>
<style>
div {
height:400px;
background-color:red;
opacity:1;
transition:1s;
}
</style>
<div id="foo">toto</div>
<script>
$("#foo").css("transition","0s");
$("#foo").css("opacity",0);
setTimeout(function(){
$("#foo").css("transition","5s");
$("#foo").css("opacity",1);
},1);
</script>
</html>
该脚本应该将 div 的不透明度重置为 0,然后在 5 秒内逐渐达到最大不透明度。 没有计时器就没有动画:不透明度为 1。 我知道我可以使用帧来制作动画,但这是当时我脑子里想的第一件事,现在我想知道为什么这不起作用(没有计时器)
工作(带计时器)
$("#foo").css("transition","0s");
$("#foo").css("opacity",0);
setTimeout(function(){
$("#foo").css("transition","5s");
$("#foo").css("opacity",1);
},1);
div {
height:400px;
background-color:red;
opacity:1;
transition:1s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="foo">toto</div>
不工作
$("#foo").css("transition","0s");
$("#foo").css("opacity",0);
$("#foo").css("transition","5s");
$("#foo").css("opacity",1);
div {
height:400px;
background-color:red;
opacity:1;
transition:1s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="foo">toto</div>
【问题讨论】:
-
删除 setTimeout 并添加它会产生相同的结果..
-
@EugeneSunic 添加什么?
-
你能把这个放到 fiddle.js 中并附上链接
-
元素
.style对象的更新不会立即触发重绘窗口中的内容。浏览器通常让 JavaScript 运行,并且只在脚本完成后才重新绘制。 -
如果要立即运行动画,则需要使用动画而不是过渡。
标签: javascript jquery animation opacity