在纯JavaScript中实现FadeOut/FadeIn
问题描述:
我的问题是只有fadeOut可以工作,而不是fadeIn。我不使用CSS或jQuery。我怎样才能使我的代码更有效。在纯JavaScript中实现FadeOut/FadeIn
代码:
HTML:
<div class="circle"id="circle1"onclick="myFunction()"></div>
<div class="circle"id="circle2" style="visibility:visible" ></div
的JavaScript:
function myFunction() {
var element = document.getElementById("circle2");
if (element.style.visibility === "visible") {
var op = 1;
var timer = setInterval(frame, 100)
function frame() {
if (op <= 0.1) {
clearInterval(timer);
element.style.visibility = "hidden";
}
element.style.opacity = op;
op -= op * 0.1;
}
} else {
var op = 0;
var timer = setInterval(frame, 10)
function frame() {
if (op >= 0.95) {
clearInterval(timer);
element.style.visibility = "visible";
}
element.style.opacity = op;
op += op * 0.1;
}
}
}
答
有此不工作的几个原因。
0 * anything is still 0 so var op = 0; op + = op * 0.1将始终为零。
它被设置为在转换为完全可见时隐藏不可见。
我玩弄了它,使其工作,但我重构了代码,以适应我的风格,而我做到了。这是我想出的。
function myFunction() {
var element = document.getElementById("circle2");
var op;
var timer;
if (element.style.visibility === "visible") {
op = 1;
timer = setInterval(fadeOut, 100)
} else {
op = 0.1;
timer = setInterval(fadeIn, 100)
}
function fadeOut() {
if (op <= 0.1) {
clearInterval(timer);
element.style.visibility = "hidden";
}
element.style.opacity = op;
op -= op * 0.1;
}
function fadeIn() {
element.style.visibility = "visible";
if (op >= 0.95) {
clearInterval(timer);
}
element.style.opacity = op;
op += op * 0.1;
}
}
<div class="circle"id="circle1"onclick="myFunction()">hello</div>
<div class="circle"id="circle2" style="visibility:visible" >Test</div>
为什么IST的** element.style.visibility = “看得见”; ** if语句之外?它有效,但为什么。 – Err404r
由于问题编号2.我们需要元素具有可见属性,所以当我们改变不透明度时,我们会看到变化。如果它在if语句中,不透明度将会改变,我们将不会看到任何东西,因为元素仍然被隐藏。 –