前端小計(setTimeout實現淡入淡出)——百度學院第二十到第二十一天:讓你和頁面對話

自己親手做的,很基礎吧!雖然很亂的樣子,沒辦法,技術有限,只能做到這一步了。
貼上代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="fade-obj" style="width: 300px; height: 300px; background: #000"></div>
  <button id="fade-btn">淡出</button>
  <script>
   //獲取元素
    var div = document.querySelector('div');
    var btn = document.querySelector('button');
    //透明度:不透明;賦給變量opa
    div.style.opacity = 1;
    var opa = parseFloat(div.style.opacity);
    //給按鈕添加監聽事件fade_out
    btn.addEventListener('click', fade_out);
    //淡出方法
    function fade_out() {
      //讓按鈕不可用
      btn.setAttribute('disabled', '');
      //淡出
      opa -= 0.1;
      div.style.opacity = opa; 
      //定時器循環
      var Out = setTimeout(function() {
        if (opa <= 0) {
        //關閉定時器(猶豫初學,無法解決精度問題,所以無法精確的讓opa == 0。滑稽)
        clearTimeout(Out);
        //移除按鈕不可用
        btn.removeAttribute('disabled', '');
        //按鈕變成淡入
        btn.innerHTML = '淡入';
        //移除監聽事件fade_out
        btn.removeEventListener('click', fade_out); 
        //綁定監聽事件fade_in
        btn.addEventListener('click', fade_in);
      }else {
        //調用自身
        fade_out();
        }
      },100)
    }
   //淡入方法
    function fade_in() {
      btn.setAttribute('disabled', '');
      opa += 0.1;
      div.style.opacity = opa;
      var In = setTimeout(function() {
        if (opa >= 1){
        clearTimeout(In);
        btn.removeAttribute('disabled', '');
        btn.innerHTML = '淡出';
      }else {
        fade_in();
        }
      }, 100);
    }  
  </script>      
</body>
</html>

在寫的過程中,我發現了一個問題,沒錯。他就是精度的問題。在不透明度(opacity)0~1之間的淡入淡出過程中,我發現無法做到精確計算,所以只能這樣做了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章