使用html和js实现的一个简单小练习轮播图。大概功能主要是:

1、使用时间函数自动切换图片;

2、在图片及按钮及小圆点的父节点身上绑定事件代理,添加mouseenter及mouseleave事件类型,让鼠标移入,图片暂停,移出,图片恢复轮播;

3、在按钮的父节点身上绑定事件代理,事件类型为click,使用event.target判断点击的目标范围,让左右两个按钮,点击可以切换上一张或下一张;
4、给图片添加样式,让下面的四个小圆点会随图片变颜色;
5、在小圆点的父节点身上绑定事件代理,事件类型为click,同样使用event.target判断点击的目标范围,让小圆点可以点击并切换到对应的图片上。

依旧使用的是DOM2事件代理,详细的解释和代码步骤我都注释在下面的代码中的,请君一阅。

【注:仅作自己查看和分享学习之用】

效果图如下:

代码如下:

轮播图section {position: relative;height: 500px;width: 780px;border: 1px solid;margin: 100px auto;}#img {height: 100%;width: 100%;background-size: 100% 100%;}p {position: absolute;left: 50%;bottom: 0px;transform: translate(-50%, -50%);}i {height: 15px;width: 15px;background-color: gray;border-radius: 50%;display: inline-block;margin-right: 10px;}i:nth-child(1) {background-color: white;}i:nth-child(4) {margin-right: 0;}.left,.right {color: rgba(255, 255, 255, 0.7);font-size: 50px;font-weight: bolder;position: absolute;top: 50%;font-weight: 500;}.left {left: 0px;transform: translate(15%, -50%);}.right {right: 0px;transform: translate(-15%, -50%);}
/**需求: *1、自动切换图片2、鼠标移入,图片暂停,移出,图片恢复轮播3、左右两个按钮,点击可以切换上一张或下一张4、下面的四个小圆点会随图片变颜色5、小圆点可以点击并切换到对应的图片上*///获取把圆点节点放置的盒子节点,即p节点let pEle = document.getElementsByTagName("p")[0];//获取事件代理的父元素sectionlet secEle = document.getElementsByTagName("section")[0];let imgArr = ["./img/冬至竹林1.jpg","./img/冬至竹林2.jpg","./img/冬至竹林3.jpg","./img/冬至竹林4.jpg",]//获取时间函数的起始下标let i = 0;//图片有多少张,就传几个参进去,并且接收这个返回的数组let cirArr = creatCircle(imgArr.length);//遍历cirArr数组,将圆点添加进它的父节点p节点中cirArr.forEach(node => pEle.appendChild(node));//获取所有的圆点节点let iEle = document.getElementsByTagName("i");//给每一个圆点添加上自定义属性,并赋上下标for (let k = 0; k  {//循环展示图片i++;//如果已经跳到最后一张,就再次回到第一张if (i > imgArr.length - 1) {i = 0;}//给圆点添加样式,开始运行该函数addStyleI(i);//图片标签地址(src属性)img.src = imgArr[i];}, 1000);}playTime();// 鼠标移入,图片暂停secEle.addEventListener("mouseenter", function () {clearInterval(timer);timer = null;});// 鼠标移出,图片恢复滚动secEle.addEventListener("mouseleave", playTime);//给父节点绑定一个事件代理,点击左右按钮切换图片secEle.addEventListener("click", function (e) {let event = e || window.event;//点击左右按钮切换图片if (event.target.className == "left iconfont icon-anniu_jiantouxiangzuo") {i--;}if (event.target.className == "right iconfont icon-anniu-jiantouxiangyou") {i++;}if (i < 0) {i = imgArr.length - 1;}if (i == imgArr.length) {//3i = 0;}img.src = imgArr[i];addStyleI(i);//点击小圆点可以切换到对应的图片上if (event.target.nodeName == "I") {console.log("11111");//获得点击的圆点的自定义索引值cirI = event.target.dataset.index;//替换图片img.src = imgArr[cirI];//更改圆点样式addStyleI(cirI);//每当点击小圆点,i的值就会被赋成圆点下标的值i = cirI;}});//暂停图片滚动function picScroll() {clearInterval(timer);}//生成圆点function creatCircle(num) {//创建一个空数组来接收这个圆点let iArr = [];for (let j = 0; j  node.style.backgroundColor = "gray");//当跳到该图片时,圆点变成白色iEle[index].style.backgroundColor = "white";}