手風琴的原理及實現過程


<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style>
    ul {
      list-style: none
    }
    
    * {
      margin: 0;
      padding: 0;
    }
    
    div {
      position: relative;
      width: 1200px;
      height: 400px;
      margin: 50px auto;
      border: 1px solid red;
      overflow: hidden;
    }
    
    div li {
      width: 1200px;
      height: 400px;
      /*float: left;*/
      position: absolute;
    }
    
    div ul {
      width: 1200px;
    }
  </style>
</head>
<body>
<div id="box">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>




<script>




手風琴主要是幾個盒不觸發事件時,會相同大小的排列在一排
這裏我們是通過定位的佈局,每次移動鼠標改變他們的left值實現的;
也可以用浮動改寬度的方式;

  //1 獲取元素
  var box = document.getElementById("box");


  var box = document.getElementById('box');


  var lis = box.children[0].children;//操作的li


  var lis = box.children[0].children;






  for(var i =0; i < lis.length; i++){


    lis[i].style.background = 'url(images/'+(i+1)+'.jpg)'


    animatess(lis[i], 'left', i*240); //鼠標不移入的時候,每個盒子的寬度相等


    lis[i].index = i;


    lis[i].onmouseover = function(){


      for(var j = 0; j < lis.length; j++){


        if(lis[j].index <= this.index){ //當盒子移入時:


          animatess(lis[j],'left', j*100);      //自身和之前的圖片的left是i*100;


        }else{


          animatess(lis[j], 'left', j*100+700); //自身之後的圖片的left值是i*100+700;
        }
      }


    }


    lis[i].onmouseout = function(){


      for(var j = 0; j < lis.length; j++){


        animatess(lis[j], 'left', j*240);
      }
    }


  }








// 還是那個運動函數


  function animatess(tag,attr,target){


    clearInterval(tag.timer);


    tag.timer = setInterval(function(){


      var leader = parseInt(getStyle(tag,attr)) || 0;


      var step = (target - leader) / 10;


      step = step > 0 ? Math.ceil(step) : Math.floor(step);


      leader = leader + step;


      tag.style[attr] = leader + 'px';


      if(leader == target){


        clearInterval(tag.timer);
      }
    },20)


  }


  function getStyle(tag,attr){


    return tag.currentStyle ? tag.currentStyle[attr] : getComputedStyle(tag,null)[attr];
  }


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