京東官網輪播圖的實現


輪播圖特效原理】 

  (1)頁面布局

      容器    定位:相對定位            大小:與輪播圖實際圖片的大小相等

      圖片    定位:絕對定位    設置圖片以塊狀display:block形式存在,解決3px的bug問題

      左右箭頭  定位:絕對定位

      圓點列表  定位:絕對定位  

  (2)輪播圖的邏輯運行原理

=================================================

【鼠標移入和移出事件】

阻止冒泡  onmouseenter/onmouseleave

有冒泡  onmouseover/onmouseout

冒泡事件:子元素觸發某個類型的事件后,該元素的父級以及先輩元素觸發同類型的事件

=================================================

具體代碼實現如下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>京東輪播圖實現</title>
    <link rel="stylesheet" href="./style.css">
  </head>
  <body>
    <div id="container">
      <!--定義圖片列表-->
      <ul id="imgs">
        <li class="active"><img src="./a.jpg" alt=""></li>
        <li><img src="./b.jpg" alt=""></li>
        <li><img src="./c.jpg" alt=""></li>
        <li><img src="./d.jpg" alt=""></li>
        <li><img src="./e.jpg" alt=""></li>
        <li><img src="./f.jpg" alt=""></li>
        <li><img src="./g.jpg" alt=""></li>
        <li><img src="./h.jpg" alt=""></li>
      </ul>
      <!--定義圓點列表-->
      <ul id="circles">
        <li class="active"></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
      <!--左右箭頭-->
      <div id="left" class="arrow"><</div>
      <div id="right" class="arrow">></div>
    </div>

    <script>

      //獲取元素
      var container = document.getElementById('container');
      var lis = container.children[0].children;
      var circles = container.children[1].children;
      var left = document.getElementById('left');
      var right = document.getElementById('right');
      var len = lis.length;
      //index表示當前所顯示圖片的下標
      var index = 0;
      var run;
      //將圖片輪播封裝為一個函數
      function turn(){
        run = setInterval(function(){
          lis[index].removeAttribute('class');
          circles[index].removeAttribute('class');
          index++;
          if(index == len){
            index = 0;
          }
          lis[index].setAttribute('class','active');
          circles[index].setAttribute('class','active');
        },2000);
     }
    //啟動時,調用函數
    turn();
    //設置鼠標移入移出容器事件
    container.onmouseenter = function(){
      //當鼠標移入容器中,停止輪播
      clearInterval(run);
    }
    container.onmouseleave = function(){
      //當鼠標移出容器時,繼續開始輪播
      turn();
    }
    //設置鼠標移動到圓點上的懸浮事件
    for(var i = 0; i < len; i++){
      circles[i].onmouseover = (function(i){
        return function(){
          lis[index].removeAttribute('class');
          circles[index].removeAttribute('class');
          index = i;
          lis[i].setAttribute('class','active');
          circles[i].setAttribute('class','active');
        }

      })(i);
    }
    //設置左箭頭單擊事件
    left.onclick = function(){
      lis[index].removeAttribute('class');
      circles[index].removeAttribute('class');
      index--;
      if(index < 0){
        index = len - 1;
      }
      lis[index].setAttribute('class','active');
      circles[index].setAttribute('class','active');
    }
    //設置右箭頭單擊事件
    right.onclick = function(){
      lis[index].removeAttribute('class');
      circles[index].removeAttribute('class');
      index++;
      if(index == len){
        index = 0;
      }
      lis[index].setAttribute('class','active');
      circles[index].setAttribute('class','active');
    }
    </script>
  </body>
</html>

【style.css如下】

*{
margin: 0;
padding: 0;
}
img{
/* display: block; */ /*解決圖片之間3px的bug問題*/
}
#container{
width:590px;
height:470px;
margin:0 auto;
margin-top: 60px;
position: relative;
}
#container>#imgs{
position: absolute;
}
#container>#imgs>li{
list-style: none;
float: left;
display: none;
}
#container>#imgs>li.active{
display: block;
}
#container>#circles{
width: 152px;
height: 18px;
position: absolute;
left: 46px;
bottom: 20px;
display: flex;
justify-content: space-around;
align-items: center;
}
#container>#circles>li{
list-style: none;
width: 14px;
height: 14px;
border-radius: 50%;
background: #fff;
}
#container>#circles>li.active{
background: red;
}
#container>div.arrow{
width: 24px;
height: 40px;
position: absolute;
margin-top: -20px;
background: rgba(0,0,0,.2);
font-size: 20px;
color: #fff;
line-height: 40px;
text-align: center;
user-select: none;
cursor: pointer;
}
#container>div.arrow:hover{
background: rgba(0,0,0,.5);
}
#container>div#left{
top: 50%;
left: 0;
}
#container>div#right{
top: 50%;
right: 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM