首頁 > web前端 > js教程 > 原生js實作百葉窗效果及原理介紹_javascript技巧

原生js實作百葉窗效果及原理介紹_javascript技巧

WBOY
發布: 2016-05-16 15:05:51
原創
2782 人瀏覽過

百葉窗大家都看過吧!如圖:

原理:

如圖所示,空心格子就好比是每個li,給它設定相對定位屬性,設定overflow:hidden;黑塊為li子元素,高度為li的2倍,設定absolute屬性,我們正是要改變它的top值而獲得變化! (右上角多餘塊與本圖無關)

版面分析:

注意top值得變化!預設top=0時候,顯示的“一樓上鋪”,當top=-40px時候,li的子元素上移40px,這時候顯示的內容就為“一樓下舖”注意p元素的包裹層div

JS分析:
1.要開多個定時器來達到效果
2、執行相反方向
3.執行多組運動
4.累加產生錯落感
5.產生時間間隔的動畫
JS程式碼如下:

<script>
  window.onload = function(){
   var oUl = document.getElementById('ul1');
   var oUl2 = document.getElementById('ul2');

   toShow(oUl);
   //每四秒执行一次
   setTimeout(function(){
    toShow(oUl2);     
   },4000); 
   function toShow(obj){
    var aDiv = obj.getElementsByTagName('div');
    var iNow = 0;
    var timer = null;
    var bBtn = true;

    setInterval(function(){   
     toChange(); 
    },2000);
    function toChange(){
     timer = setInterval(function(){
      if(iNow==aDiv.length){
       clearInterval(timer);
       iNow = 0;
       bBtn = !bBtn;
      }
      else if(bBtn){
       startMove(aDiv[iNow],{top:0},function(){
        var p = document.getElementsByClassName('p-2');
        for(var i=0; i<p.length;i++){
         p[i].style.background = 'red';
        }
       });
       iNow++;
      }
      else{
       startMove(aDiv[iNow],{top:-30});
       iNow++;
      }     
     },100);     
    }    
   }   
  };
       //运动框架
  function startMove(obj,json,endFn){ 
   clearInterval(obj.timer);  
   obj.timer = setInterval(function(){   
    var bBtn = true;   
    for(var attr in json){    
     var iCur = 0;   
      iCur = parseInt(getStyle(obj,attr)) || 0;
     var iSpeed = (json[attr] - iCur)/8;
      iSpeed = iSpeed >0 &#63; Math.ceil(iSpeed) : Math.floor(iSpeed);

     if(iCur!=json[attr]){
      bBtn = false;
     }
     obj.style[attr] = iCur + iSpeed + 'px';    
    }   
    if(bBtn){
     clearInterval(obj.timer);
     if(endFn){
      endFn.call(obj);
     }
    }
   },30); 
  }
        //获取非行间样式
  function getStyle(obj,attr){
   if(obj.currentStyle){
    return obj.currentStyle[attr];
   }
   else{
    return getComputedStyle(obj,false)[attr];
   }
  }
 </script>

登入後複製

下載位址:js實現百葉窗效果
以上就是本文的全部內容,希望對大家學習實作js百葉窗效果有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板