本文实例为大家分享了JS轮播图的实现代码,供大家参考,具体内容如下
需求:
自动轮播,鼠标移入轮播停止、移出继续,小圆点点击切图,左右箭头切图
效果图:
![轮播图]
思路:
将所有需要轮播的图片横向排列,可视区大小设置为只能显示一张图片,给容器设置移出隐藏后,可视区之外的部分被隐藏,这样我们就只能看见一张图片。
轮播实现是改变整个图片画幅的left值或者margin-left 值,当点击时移动整个画幅单个图片的宽度即可实现滚动到下一张。
后面功能实现顺序依旧是写法一里的思路。
HTML部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< div id = "banner" > < div class = "w" > <!-- 左右箭头--> < span class = "iconfont icon-zuojiantou" ></ span > < span class = "iconfont icon-youjiantou" ></ span > <!-- 轮播图--> < ul > < li >< img src = "img/1.jpg" alt = "" ></ li > < li >< img src = "img/2.jpg" alt = "" ></ li > < li >< img src = "img/3.jpg" alt = "" ></ li > </ ul > <!-- /小圆点--> < ol id = "circleContainer" > </ ol > </ div > </ div > |
CSS部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<style> *{ margin : 0 ; padding : 0 ; list-style : none ; } .w { width : 1000px ; height : 600px ; margin : 100px auto 0 ; position : relative ; overflow : hidden ; } ul { width : 1000% ; transition: all . 5 s ease-in-out; } ul li { float : left ; width : 1000px ; } ul li img { width : 100% ; height : 600px ; } .iconfont { color : white ; position : absolute ; font-size : 30px ; top : calc( 50% - 15px ); background-color : rgba( 216 , 216 , 216 , 0.23 ); border-top-right-radius: 50% ; border-bottom-right-radius: 50% ; cursor : pointer ; } .iconfont:hover { color : palegreen; } .icon-zuojiantou { left : 0 ; } .icon-youjiantou { right : 0 ; } #circleContainer { position : absolute ; bottom : 10px ; left : calc( 50% - 30px ); } #circleContainer li { display : inline- block ; width : 20px ; height : 20px ; border-radius: 50% ; background-color : white ; margin-right : 5px ; } #circleContainer .change { background-color : palegreen; } </style> |
JS部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<script> let timer = setInterval( function () { arrow_r.onclick(); },2000); let w = document.querySelector( ".w" ); w.addEventListener( "mouseenter" , function () { clearInterval(timer); }); w.addEventListener( "mouseleave" , function () { clearInterval(timer); timer = setInterval( function () { arrow_r.onclick(); },2000); }); //获取元素 let ul = document.querySelector( "ul" ); let ol = document.querySelector( "#circleContainer" ); let arrow_r = document.querySelector( ".icon-youjiantou" ); let arrow_l = document.querySelector( ".icon-zuojiantou" ); let ImgWidth = ul.children[0].offsetWidth; let location_i = 0 ; // 创建小圆点 动态生成小圆点,图片增加时小圆点也随之增加 for (let i = 0; i<ul.children.length;i++){ let li = document.createElement( "li" ); li.setAttribute( "index" ,i); li.addEventListener( "click" , function () { let index = this .getAttribute( "index" ); move(ul,index); location_i = index ; }); ol.appendChild(li); } let liclone = ul.children[0].cloneNode( true ); ul.appendChild(liclone); // 轮播函数 function move(targetObj,n) { if (n === targetObj.children.length ) { targetObj.style.marginLeft = "0px" ; n = 0; } targetObj.style.marginLeft = -n * ImgWidth + "px" ; for (let i =0 ;i<ol.children.length;i++){ ol.children[i].className = "" ; } n === 3 ? ol.children[0].className = "change" : ol.children[n].className = "change" ; } ol.children[0].className = "change" ; // 右箭头点击 arrow_r.onclick = function () { if (location_i === 3) { location_i = 0 ; ul.style.marginLeft = "0px" ; } location_i++; move(ul,location_i); }; // 左箭头点击 arrow_l.addEventListener( "click" , function () { if (location_i == 0) { location_i = ul.children.length -1 ; } location_i--; move(ul,location_i); }) </script> |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/hthththtt/article/details/108181977