js实现轮播图
1 <style> 2 * { 3 padding: 0; 4 margin: 0; 5 } 6 /* 1.轮播图容器 */ 7 .slide { 8 width: 600px; 9 height: 400px; 10 margin: 100px auto; 11 position: relative; 12 } 13 14 /* 1.1图片 */ 15 .slide img { 16 width: 100%; 17 height: 100%; 18 } 19 /* 1.2上一张按钮 */ 20 .slide .prev, 21 .slide .next { 22 position: absolute; 23 width: 50px; 24 height: 50px; 25 line-height: 50px; 26 background-color: #666; 27 top: 50%; 28 text-align: center; 29 border-radius: 50%; 30 color: #fff; 31 font-size: 26px; 32 transform: translateY(-50%); 33 } 34 .slide .prev { 35 left: 10px; 36 } 37 38 /* 1.3下一张按钮 */ 39 .slide .next { 40 right: 10px; 41 } 42 43 /* span小圆点 */ 44 .circles { 45 position: absolute; 46 bottom: 10px; 47 width: 160px; 48 height: 16px; 49 left: 50%; 50 z-index: 10; 51 transform: translateX(-50%); 52 } 53 54 .circles span { 55 display: inline-block; 56 width: 16px; 57 height: 16px; 58 margin: 0 10px; 59 background-color: #fff; 60 border-radius: 50%; 61 } 62 63 .circles .active { 64 background-color: aqua; 65 } 66 </style> 67 </head> 68 69 <body> 70 <!-- 轮播图容器 --> 71 <div class="slide"> 72 <!--1.1 图片 --> 73 <img src="./img/02.webp" alt=""> 74 <!-- 1.2上一张按钮 --> 75 <div class="prev"> 76 < </div> 77 <!-- 1.3下一张按钮 --> 78 <div class="next">></div> 79 <!--1.4小圆点 --> 80 <div class="circles"> 81 <!-- 用map方法动态渲染小圆圈 --> 82 <!-- <span class="active"></span> 83 <span></span> 84 <span></span> 85 <span></span> --> 86 </div> 87 88 </div> 89 90 <script> 91 // 定义数组,保存所有图片路径 92 var arr = ['./img/01.webp', './img/02.webp', './img/03.webp', './img/04.webp'] 93 // 获取图片的dom元素 94 var img = document.querySelector('img'); 95 96 var slide = document.querySelector('.slide'); 97 98 // 默认从0开始 99 var index = 0; 100 // 定义变量保存定时器标识 101 var timeId; 102 103 // 获取小圆点大容器 104 var circles = document.querySelector('.circles') 105 // 获取上一张按钮 106 var prev = document.querySelector('.prev') 107 108 // 获取下一张按钮 109 var next = document.querySelector('.next') 110 111 112 // 开启定时器 更换图片集 113 // 开启自动轮播 调用下面封装的方法 114 autoPlay() 115 // 渲染小圆点 116 render() 117 // 给slide添加鼠标移入和移出时间 118 slide.addEventListener('mouseover', function () { 119 // 鼠标移入清除定时器 120 clearInterval(timeId) 121 }) 122 slide.addEventListener('mouseout', function () { 123 // 鼠标离开自动开启定时器:就是把上面的代码复制一份 124 // 开启自动轮播 调用下面封装的方法 125 autoPlay() 126 127 128 }) 129 // 给上一张和下一张添加点击事件 130 prev.addEventListener('click', function () { 131 // 更改下标 132 index = --index === -1 ? arr.length - 1 : index; 133 // 显示图片 134 img.src = arr[index]; 135 // 重新渲染小圆点 136 render() 137 }) 138 next.addEventListener('click', function () { 139 // 更改下标 140 index = ++index === arr.length - 1 ? 0 : index; 141 // 显示图片 142 img.src = arr[index]; 143 // 重新渲染小圆点 144 render() 145 }) 146 147 // 封装函数 鼠标移入前的轮播,和鼠标离开后的轮播代码重复 148 // 轮播图渲染方法 149 function autoPlay() { 150 timeId = setInterval(function () { 151 // 定义变量,保存默认显示的图片下标 152 // 更改下标 注意不能一直加 因为数组长度是4,超过4让它从0开始再次轮回(用三目运算) 153 index = ++index === arr.length ? 0 : index; 154 // 每隔一秒更换下一张图片路径 155 img.src = arr[index]; 156 157 // 定时器开启时渲染小圆点重新激活 158 render() 159 }, 1000) 160 } 161 // 封装小圆点的渲染 162 function render() { 163 circles.innerHTML = arr.map(function (item, i) { 164 // i是当前小圆点 index是当前下标 165 return ` <span class=${index === i ? 'active' : ''}></span>`; 166 // 数组转字符串用join 167 }).join(''); 168 } 169 </script>
案例总结:
1、图片要放入数组,添加定时器每秒钟让图片换下一张可以调用下标来完成,数字超过图片数量从第一张开始播放。
2、添加鼠标移入移出事件,鼠标移入清除定时器,鼠标离开自动开启定时器同时开启自动轮播。
3、给上一张下一张按钮添加点击事件,每次点击下标改变图片轮播图更换
注意:重复代码请封装函数,避免代码冗余,以便于复用代码。
结语:荣姐,加油!!!
<style>
* {
padding: 0;
margin: 0;
}
/* 1.轮播图容器 */
.slide {
width: 600px;
height: 400px;
margin: 100px auto;
position: relative;
}
/* 1.1图片 */
.slide img {
width: 100%;
height: 100%;
}
/* 1.2上一张按钮 */
.slide .prev,
.slide .next {
position: absolute;
width: 50px;
height: 50px;
line-height: 50px;
background-color: #666;
top: 50%;
text-align: center;
border-radius: 50%;
color: #fff;
font-size: 26px;
transform: translateY(-50%);
}
.slide .prev {
left: 10px;
}
/* 1.3下一张按钮 */
.slide .next {
right: 10px;
}
/* span小圆点 */
.circles {
position: absolute;
bottom: 10px;
width: 160px;
height: 16px;
left: 50%;
z-index: 10;
transform: translateX(-50%);
}
.circles span {
display: inline-block;
width: 16px;
height: 16px;
margin: 0 10px;
background-color: #fff;
border-radius: 50%;
}
.circles .active {
background-color: aqua;
}
</style>
</head>
<body>
<!-- 轮播图容器 -->
<div class="slide">
<!--1.1 图片 -->
<img src="./img/02.webp" alt="">
<!-- 1.2上一张按钮 -->
<div class="prev">
< </div>
<!-- 1.3下一张按钮 -->
<div class="next">></div>
<!--1.4小圆点 -->
<div class="circles">
<!-- 用map方法动态渲染小圆圈 -->
<!-- <span class="active"></span>
<span></span>
<span></span>
<span></span> -->
</div>
</div>
<script>
// 定义数组,保存所有图片路径
var arr = ['./img/01.webp', './img/02.webp', './img/03.webp', './img/04.webp']
// 获取图片的dom元素
var img = document.querySelector('img');
var slide = document.querySelector('.slide');
// 默认从0开始
var index = 0;
// 定义变量保存定时器标识
var timeId;
// 获取小圆点大容器
var circles = document.querySelector('.circles')
// 获取上一张按钮
var prev = document.querySelector('.prev')
// 获取下一张按钮
var next = document.querySelector('.next')
// 开启定时器 更换图片集
// 开启自动轮播 调用下面封装的方法
autoPlay()
// 渲染小圆点
render()
// 给slide添加鼠标移入和移出时间
slide.addEventListener('mouseover', function () {
// 鼠标移入清除定时器
clearInterval(timeId)
})
slide.addEventListener('mouseout', function () {
// 鼠标离开自动开启定时器:就是把上面的代码复制一份
// 开启自动轮播 调用下面封装的方法
autoPlay()
})
// 给上一张和下一张添加点击事件
prev.addEventListener('click', function () {
// 更改下标
index = --index === -1 ? arr.length - 1 : index;
// 显示图片
img.src = arr[index];
// 重新渲染小圆点
render()
})
next.addEventListener('click', function () {
// 更改下标
index = ++index === arr.length - 1 ? 0 : index;
// 显示图片
img.src = arr[index];
// 重新渲染小圆点
render()
})
// 封装函数 鼠标移入前的轮播,和鼠标离开后的轮播代码重复
// 轮播图渲染方法
function autoPlay() {
timeId = setInterval(function () {
// 定义变量,保存默认显示的图片下标
// 更改下标 注意不能一直加 因为数组长度是4,超过4让它从0开始再次轮回(用三目运算)
index = ++index === arr.length ? 0 : index;
// 每隔一秒更换下一张图片路径
img.src = arr[index];
// 定时器开启时渲染小圆点重新激活
render()
}, 1000)
}
// 封装小圆点的渲染
function render() {
circles.innerHTML = arr.map(function (item, i) {
// i是当前小圆点 index是当前下标
return ` <span class=${index === i ? 'active' : ''}></span>`;
// 数组转字符串用join
}).join('');
}
</script>