JavaScript實現圖片的自動輪播


一、html和css部分代碼

  設計的框架為:

    一個大的div用來顯示圖片(共四張圖片),這個大的div中包含兩個箭頭,用來切換圖片,向左或向右;

    然后底部有四個小的div用來對應每張圖片;

  html和css效果圖:

 

 代碼:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="utf-8">
 5     <title>myImages</title>
 6     <style type="text/css">
 7         img{
 8             width: 100%;
 9         }
10 
11         .li_img{
12             width: 800px;
13             float: left;
14             list-style: none;
15         }
16 
17         .ul_img{
18             width: 6000px;
19             padding:0px;
20             margin: 0px;
21             transition: all 2s;
22 
23         }
24 
25         .main_div{
26             width: 800px;
27             overflow: hidden;
28             position: relative;
29             top: 100px;
30             left: 350px;
31         }
32 
33         .arrows{
34             z-index: 9999;
35             position: absolute;
36             padding-top: 230px;
37             width: 800px;
38         }
39 
40         .arrows span{
41             font-size: 3em;
42             color: seashell;
43         }
44 
45         .arrows span:hover {
46             cursor: pointer;
47             background-color: rgba(192, 192, 192, 0.29);
48         }
49 
50         .div_btn{
51             float: left;
52             border-radius: 100px;
53             background-color: aquamarine;
54             width: 60px;
55             height: 10px;
56             margin-left: 10px;
57             margin-top: 130px;
58         }
59 
60         .div_btn:hover{
61             background-color:aqua;
62 
63         }
64     </style>
65 </head>
66 <body>
67     <div class = "main_div">
68         <div class = "arrows">
69             <span title="1" class="arrow"><</span>
70             <span title="0" class="arrow" style="float: right">></span>
71         </div>
72 
73         <ul class="ul_img">
74             <li class="li_img"><img src="images/1.jpg"></li>
75             <li class="li_img"><img src="images/2.jpg"></li>
76             <li class="li_img"><img src="images/3.jpg"></li>
77             <li class="li_img"><img src="images/4.jpg"></li>
78         </ul>
79     </div>
80 
81     <div style="margin-left: 600px">
82         <div class="div_btn"></div>
83         <div class="div_btn"></div>
84         <div class="div_btn"></div>
85         <div class="div_btn"></div>
86     </div>
87     <script type="text/javascript" src="myscript.js"></script>
88 </body>
89 </html>

 

JavaScript部分:

輪播的原理:先把圖片排成一行,然后准備一個只有一張圖片大小的容器,對這個容器設置超出部分隱藏,再控制定時器來讓這些圖片整體左移或右移,這樣呈現出來的效果就是圖片在輪播了。

  實現的功能:

      1、圖片可以自動右向輪播,輪播至最后一張圖片的時候,反向向左輪播,循環反復

      2、可以用左右方向鍵去控制圖片輪播方向

      3、可以利用下方的圓角矩形來選擇瀏覽某一張圖片

 根據實現的功能,具體代碼實現分為三個部分:

     1、實現圖片的自動輪播:這里需要設計一個定時器,用到setInterval()方法,每隔一段時間,重復執行一次輪播代碼,當輪播到邊界時,設置數組的下標往反方向輪播即可。

     2、給左右箭頭添加事件,實現通過左右箭頭選擇輪播的方向

     3、給下方的四個圓角矩形添加事件,實現瀏覽某張特定的圖片

 

具體代碼:(myscript.js)

  1 1 //記錄輪播的次數
  2   2         var count = 0;
  3   3         //輪播的方向,默認向右
  4   4         var isgo = 0;
  5   5         //第一計時器對象
  6   6         var timer;
  7   7         //獲取ul元素
  8   8         var ul_img = document.getElementsByClassName("ul_img")[0];
  9   9         //獲取所有li圖片元素
 10  10         var li_img = document.getElementsByClassName("li_img");
 11  11         //第一部分,設置定時器
 12  12         function showtime(){
 13  13             timer = setInterval(function(){
 14  14                 if(isgo==false){ //isgo為false表示向右輪播
 15  15                     count++;
 16  16                     if(count>=li_img.length-1){ //如果輪播到右邊界,往反方向輪播
 17  17                         count = li_img.length-1;
 18  18                         isgo=true;
 19  19                     }
 20  20                     //顯示輪播到的當前圖片,圖片輪播的原理就是把圖片排成一行,
 21  21                     //然后准備一個只有一張圖片大小的容器,對這個容器設置超出部分隱藏,
 22  22                     //再控制定時器來讓這些圖片整體左移或右移,這樣呈現出來的效果就是圖片在輪播了
 23  23                     ul_img.style.transform = "translate("+ -800*count +"px)";
 24  24                 }else{ //isgo為true表示向左輪播
 25  25                     count--;
 26  26                     if (count<=0) { //如果輪播到左邊界,往反方向輪播
 27  27                         count = 0;
 28  28                         isgo=false;
 29  29                     }
 30  30                     //顯示輪播到的當前圖片
 31  31                     ul_img.style.transform = "translate("+ -800*count +"px)";
 32  32                 }
 33  33 
 34  34                 for (var i = 0; i < div_btn.length; i++) { 
 35  35                 //這里是給下面的圓角矩形設置顏色,當輪播到這張圖片時,顯示為深色,否則顯示為淺色
 36  36                     div_btn[i].style.backgroundColor = "aquamarine";
 37  37                 }
 38  38                 div_btn[count].style.backgroundColor = "aqua";
 39  39             },4000);//每次延遲4秒鍾
 40  40         }
 41  41         showtime();
 42  42 
 43  43         //第二部分,為箭頭添加事件
 44  44         //獲取控制方向的箭頭元素
 45  45         var arrow = document.getElementsByClassName("arrow");
 46  46         //為箭頭綁定事件
 47  47         for(var i=0; i<arrow.length ;i++){
 48  48             //鼠標懸停時
 49  49             arrow[i].onmouseover = function(){
 50  50                 //停止計時器
 51  51                 clearInterval(timer);
 52  52             }
 53  53             //鼠標離開時,開始輪播
 54  54             arrow[i].onmouseout = function(){
 55  55                 showtime();
 56  56             }
 57  57             //鼠標點擊時,輪播一張圖片
 58  58             arrow[i].onclick = function(){
 59  59                 //區分左右箭頭
 60  60                 if(this.title==0){ //點擊的是右箭頭時,往右輪播
 61  61                     count++;
 62  62                     if(count>3) {
 63  63                         count = 0;
 64  64                     }
 65  65                 }else{
 66  66                     count--;
 67  67                     if(count<0){
 68  68                         count=3;
 69  69                     }
 70  70                 }
 71  71                 //顯示輪播到的當前圖片
 72  72                 ul_img.style.transform="translate("+ -800*count+"px)";
 73  73                 for (var i = 0; i < div_btn.length; i++) {
 74  74                             div_btn[i].style.backgroundColor = "aquamarine";
 75  75                         }
 76  76                         div_btn[count].style.backgroundColor = "aqua";
 77  77             }
 78  78         }
 79  79  
 80  80          //第三部分
 81  81         //鼠標懸停在底部圓角矩形的操作
 82  82         var div_btn = document.getElementsByClassName("div_btn");
 83  83         div_btn[0].style.backgroundColor = "aqua"; //剛開始時,默認在第一張圖,下面的圓角矩形應顯示為深色
 84  84         for (var i = 0; i<div_btn.length; i++) { //給每個圓角矩形添加事件
 85  85             div_btn[i].index = i;
 86  86             div_btn[i].onmouseover = function(){
 87  87                 //當鼠標落在某個圓角矩形時
 88  88                 clearInterval(timer); //停止定時器
 89  89                 for(var j=0;j<div_btn.length;j++){ //設置矩形的顏色
 90  90                     div_btn[j].style.backgroundColor="aquamarine";
 91  91                 }
 92  92                 div_btn[this.index].style.backgroundColor="aqua";
 93  93                 //控制方向,當鼠標停留在邊界時,需設置輪播的方向,便於
 94  94                 //鼠標離開重新啟動定時器時,輪播的方向正確
 95  95                 if (this.index==3) {
 96  96                     isgo = true;
 97  97                 }
 98  98                 if (this.index==0) {
 99  99                     isgo = false;
100 100                 }
101 101                 //讓count值對應
102 102                 count = this.index;
103 103                 ul_img.style.transform = "translate("+ -800*this.index +"px)";
104 104             }
105 105             div_btn[i].onmouseout = function(){//鼠標離開時
106 106                 //重新啟動計時器
107 107                 showtime();
108 108             }
109 109         }
View Code

 

總結:

JavaScript用到的主要知識點:

1、setInterval()和clearInterval()方法,用來控制定時器;

2、鼠標的mouseover、mouseout和click事件;

 

對我個人而言,主要難點在於對html和css不熟悉。

 

整體效果圖(一直想弄一個動態圖,沒弄出來,不好意思,只能靜態的截圖了):

 

 


免責聲明!

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



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