我正在尝试用***纯JavaScript***为div
制作淡出效果。
这是我目前正在使用的:
//Imagine I want to fadeOut an element with id = "target"
function fadeOutEffect()
{
var fadeTarget = document.getElementById("target");
var fadeEffect = setInterval(function() {
if (fadeTarget.style.opacity < 0.1)
{
clearInterval(fadeEffect);
}
else
{
fadeTarget.style.opacity -= 0.1;
}
}, 200);
}
div应该平滑地淡出,但它会立即消失。
怎么了?我该怎么解决?
jsbin
8条答案
按热度按时间r7s23pms1#
最初,当没有设置不透明度时,该值将是一个空字符串,这将导致运算失败,即
"" < 0.1 == true
,您的代码将进入clearInterval
分支。您可以将其默认为1,这样就可以正常工作。
空字符串在进行算术和比较时似乎被JavaScript视为0(尽管在CSS中它将空字符串视为完全不透明)
mo49yndu2#
就在今天早上,我在http://vanilla-js.com上找到了这段代码,它非常简单、紧凑和快速:
您可以通过更改
setTimeOut
函数中的第二个参数来更改渐变速度。x一个一个一个一个x一个一个二个一个x一个一个三个一个
js81xvg63#
看起来你可以用另一种方法来做(我可能错了)。
ohfgkhjo4#
你可以使用CSS转换属性而不是在javascript中使用vai定时器。与你正在做的相比,这更注重性能。
核对
http://fvsch.com/code/transition-fade/test5.html#test3
ht4b089n5#
除了公认的答案之外,我们现在还有WAAPI,它基本上是将动画API添加到JavaScript中。
例如,
rkue9o1l6#
nfs0ujit7#
我的解决方案
tkclm6bt8#
虽然这个和其他SO线程中的大多数解决方案都能工作,但这里我有两分钱。如果你只想依赖纯JS,那么这应该可以做到:
这里的关键是
el.style.opacity -= .009
,它给予一个很酷的淡出效果。保持它在1/2秒以下(本例中为0.009),这样效果在元素隐藏之前就可以看到。