欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原生js轮播图实现

程序员文章站 2024-03-17 11:24:52
...
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Document</title>
  6         <style type="text/css">
  7     * {
  8         padding: 0;
  9         margin: 0;
 10         list-style: none;
 11         border: 0;
 12     }
 13 
 14     .all {
 15         width: 500px;
 16         height: 200px;
 17         padding: 7px;
 18         border: 1px solid #ccc;
 19         margin: 100px auto;
 20         position: relative;
 21     }
 22 
 23     .screen {
 24         width: 500px;
 25         height: 200px;
 26         overflow: hidden;
 27         position: relative;
 28     }
 29 
 30     .screen li {
 31         width: 500px;
 32         height: 200px;
 33         overflow: hidden;
 34         float: left;
 35     }
 36 
 37     .screen ul {
 38         position: absolute;
 39         left: 0;
 40         top: 0px;
 41         width: 3000px;
 42     }
 43 
 44     .all ol {
 45         position: absolute;
 46         right: 10px;
 47         bottom: 10px;
 48         line-height: 20px;
 49         text-align: center;
 50     }
 51 
 52     .all ol li {
 53         float: left;
 54         width: 20px;
 55         height: 20px;
 56         background: #fff;
 57         border: 1px solid #ccc;
 58         margin-left: 10px;
 59         cursor: pointer;
 60     }
 61 
 62     .all ol li.current {
 63         background: yellow;
 64     }
 65 
 66     #arr {
 67         display: none;
 68     }
 69 
 70     #arr span {
 71         width: 40px;
 72         height: 40px;
 73         position: absolute;
 74         left: 5px;
 75         top: 50%;
 76         margin-top: -20px;
 77         background: #000;
 78         cursor: pointer;
 79         line-height: 40px;
 80         text-align: center;
 81         font-weight: bold;
 82         font-family: '黑体';
 83         font-size: 30px;
 84         color: #fff;
 85         opacity: 0.3;
 86         border: 1px solid #fff;
 87     }
 88 
 89     #arr #right {
 90         right: 5px;
 91         left: auto;
 92     }
 93     </style>
 94 </head>
 95 <body>
 96     <div class="all" id='all'>
 97     <div class="screen" id="screen">
 98         <ul id="ul">
 99             <li><img src="images/carousel/1.jpg" width="500" height="200" /></li>
100             <li><img src="images/carousel/2.jpg" width="500" height="200" /></li>
101             <li><img src="images/carousel/3.jpg" width="500" height="200" /></li>
102             <li><img src="images/carousel/4.jpg" width="500" height="200" /></li>
103             <li><img src="images/carousel/5.jpg" width="500" height="200" /></li>
104         </ul>
105         <ol>
106         </ol>
107         <div id="arr">
108             <span id="left"><</span>
109             <span id="right">></span>
110         </div>
111     </div>
112 </div>
113 
114 <script>
115     //1.获取事件源
116     var all = document.getElementById("all");
117     var screen = all.firstElementChild || all.firstChild;
118     var imgWidth = screen.offsetWidth;
119     var ul = screen.firstElementChild || screen.firstChild;
120     var ol = screen.children[1];
121     var div = screen.lastElementChild || screen.lastChild;
122     var spanArr = div.children;
123 
124     //2.复制第一张图片所在的li,添加到ul的最后面
125     var ulNewLi = ul.children[0].cloneNode(true);
126     ul.appendChild(ulNewLi);
127 
128     //3.给ol添加li,ul的个数-1个,并点亮第一个按钮
129     for (var i = 0; i < ul.children.length - 1; i  ) {
130         var olNewLi = document.createElement("li");
131         olNewLi.innerHTML = i   1;
132         ol.appendChild(olNewLi);
133     }
134 
135     var olLiArr = ol.children;
136     olLiArr[0].className = "current";
137 
138     //4.鼠标放到ol的li上,切换图片
139     for (var i = 0; i < olLiArr.length; i  ) {
140         olLiArr[i].index = i;
141         olLiArr[i].onmouseover = function(){
142             for (var j = 0; j < olLiArr.length; j  ) {
143                 olLiArr[j].className = "";
144             }
145             this.className = "current";
146             //鼠标放到小的方块上的时候索引值和key以及square同步
147             key = square = this.index;
148             //移动盒子
149             animate(ul,-this.index * imgWidth);
150         }
151     }
152 
153     //5.添加定时器
154     var timer = setInterval(autoPlay,1000);
155     //固定向右切换图片,两个定时器(一个记录图片,一个记录小方块)
156     var key = 0;
157     var square = 0;
158 
159     function autoPlay(){
160         //通过控制key的自增来模拟图片的索引值,然后移动ul
161         key   ;
162         if (key > olLiArr.length) {
163             //图片已经滑动到最后一张,接下来,跳转到第一张,然后在滑动到第二张
164             ul.style.left = 0;
165             key = 1;
166         }
167         animate(ul,-key * imgWidth);
168         //通过控制square的自增来模拟小方块的索引值,然后点亮盒子
169         square   ;
170         if (square > olLiArr.length - 1) {
171             square = 0;
172         }
173         for (var i = 0; i < olLiArr.length; i  ) {
174             olLiArr[i].className = "";
175         }
176         olLiArr[square].className = "current";
177     }
178 
179     //鼠标放上去清除定时器,移开后再开启定时器
180     all.onmouseover = function(){
181         div.style.display = "block";
182         clearInterval(timer);
183     }
184     all.onmouseout = function(){
185         div.style.display = "none";
186         timer = setInterval(autoPlay, 1000);
187     }
188 
189     //6.左右切换图片,鼠标放上去显示,移开隐藏
190     spanArr[0].onclick = function(){
191         //通过控制key的自增来模拟图片的索引值,然后移动ul
192         key --;
193         if (key < 0) {
194             //先移动到最后一张,然后key的值取之前一张的索引值,然后在向前移动
195             ul.style.left = -imgWidth * (olLiArr.length)   "px";
196             key = olLiArr.length - 1;
197         }
198         animate(ul, -key * imgWidth);
199     
200 
201             //通过控制square的自增来模拟小方块的索引值,然后点亮盒子
202         //排他思想做小方块
203         square--;
204         if (square < 0) { //索引值不能大于等于5,如果等于5,立刻变为0;
205             square = olLiArr.length - 1;
206         }
207         for (var i = 0; i < olLiArr.length; i  ) {
208             olLiArr[i].className = "";
209         }
210         olLiArr[square].className = "current";
211     }
212     spanArr[1].onclick = function() {
213         //右侧的和定时器一模一样
214         autoPlay();
215     }
216             function animate(ele, target) {
217         clearInterval(ele.timer);
218         var speed = target > ele.offsetLeft ? 10 : -10;
219         ele.timer = setInterval(function() {
220             var val = target - ele.offsetLeft;
221             ele.style.left = ele.offsetLeft   speed   "px";
222             if (Math.abs(val) < Math.abs(speed)) {
223                 ele.style.left = target   "px";
224                 clearInterval(ele.timer);
225             }
226         }, 10)
227     }
228 
229 
230     //7.
231 </script>
232 </body>
233 </html>

 


更多专业前端知识,请上【猿2048】www.mk2048.com
相关标签: javascript