我想让div显示淡入淡出效果:
<div id="toto" style="background:red;width:200px;height:200px"></div>
我所知道的最简单的方法是使用CSS属性&#34; transition&#34;和&#34;不透明度&#34;。 在我看来,这段代码应该有效(但它没有):
document.getElementById("toto").style.opacity = 0;
document.getElementById("toto").style.transition = "all 5s ease";
document.getElementById("toto").style.opacity = 1;
(见:http://jsfiddle.net/87q44ysg/1/#share)
任何人都知道为什么? 我找到了这个黑客,但我无法解释为什么它只适用于这种情况......:
document.getElementById("toto").style.opacity = 0;
window.setTimeout(function(){
document.getElementById("toto").style.transition = "all 5s ease";
document.getElementById("toto").style.opacity = 1;
}, 1);
(见:http://jsfiddle.net/36009t1x/#share)
谢谢!
答案 0 :(得分:2)
第一个案例
document.getElementById("toto").style.opacity = 0;
document.getElementById("toto").style.transition = "all 5s ease";
document.getElementById("toto").style.opacity = 1;
这是因为上面javascript中的每一行都是立即调用的,它类似于设置这些css规则:
#toto {
opacity: 0;
transition: all 5s ease;
opacity: 1;
}
正如您所看到的,第二次出现的不透明度将覆盖值0,因此结果将为1。
#toto {
transition: all 5s ease;
opacity: 1;
}
在这种情况下,没有动画只是静态不透明度,不会发生变化。
第二种情况
document.getElementById("toto").style.opacity = 0;
window.setTimeout(function(){
document.getElementById("toto").style.transition = "all 5s ease";
document.getElementById("toto").style.opacity = 1;
}, 1);
在这种情况下,您最初将不透明度设置为0.并且在1ms后更改css规则,因此不透明度从0更改为1.这就是动画被触发的原因。
问候。
答案 1 :(得分:0)
你应该避免在普通的Javascript中设置样式并将其移动到CSS。至于你的问题,它没有标准化,每个浏览器都可以做任何开发人员认为正确的事情。可能在重排或类似事件之前,transition
属性并未真正应用。有关更详细的测试,请参阅此问题:Clean way to programmatically use CSS transitions from JS?
答案 2 :(得分:0)
你需要玩这个超时。
试试这个: DEMO
根据需要使用值,以达到理想的效果。
你可以用setInterval获得相同的结果,但我更喜欢这个中的setTimeout。
/*Fades in an element. Params: A DOM Element*/
var fade = function (node) {
var level = 0;
var step = function ( ) {
node.style.opacity = level;
if (level < 1) {
level += 0.1;
setTimeout(step, 50); //increase the value by 0.1 every 50ms
}
};
setTimeout(step, 0); //calls immidiatelly (4ms after)
};
fade(document.body);
干杯!
答案 3 :(得分:-1)
这很好,有帮助吗?
setTimeout(function() {document.getElementById("toto").style.opacity = "1";},500);
&#13;
#toto {
transition: opacity 5s;
opacity: 0;
}
&#13;
<div id="toto" style="background:red;height:200px"></div>
&#13;