2016-08-17 50 views
2

我的問題是隻有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; 
    } 
    } 
} 

回答

1

有此不工作的幾個原因。

  1. 0 * anything is still 0 so var op = 0; op + = op * 0.1將始終爲零。

  2. 它被設置爲在轉換爲完全可見時隱藏不可見。

我玩弄了它,使其工作,但我重構了代碼,以適應我的風格,而我做到了。這是我想出的。

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>

+0

爲什麼IST的** element.style.visibility = 「看得見」; ** if語句之外?它有效,但爲什麼。 – Err404r

+0

由於問題編號2.我們需要元素具有可見屬性,所以當我們改變不透明度時,我們會看到變化。如果它在if語句中,不透明度將會改變,我們將不會看到任何東西,因爲元素仍然被隱藏。 –