1.使用css样式来进行激活导航栏、显示列表样式2.使用html data-*属性建立每一个导航栏与每一个显示列表相同的索引,每当点击导航栏时就会激活相同索引的显示列表3.对导航栏使用事件委托
<!DOCTYPE html><html lang="zh_hans"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.box {width: 300px;height: 340px;}.nav-box {height: 40px;background-color: lightsalmon;}.nav-box ul {list-style: none;display: flex;justify-content: space-between;}.nav-box ul li {width: 75px;height: 40px;display: flex;align-items: center;justify-content: center;}.list-box {height: 300px;background-color: lightcoral;}/*导航栏的激活样式*/.u01 .active {background-color: yellow;}/*显示区块默认都是隐藏的*/.d {display: none;}/*显示区块的激活样式*/.list-box .d.active {display: block;}</style></head><body><div class="box"><div class="nav-box"><ul class="u01"><!--第一个导航列表默认是激活的--><li class="active" data-index="1">家具</li><li data-index="2">家电</li><li data-index="3">电脑</li><li data-index="4">手机</li></ul></div><div class="list-box"><!--第一个显示区块默认是激活的--><div class="d active" data-index="1">家具内容</div><div class="d" data-index="2">家电内容</div><div class="d" data-index="3">电脑内容</div><div class="d" data-index="4">手机内容</div></div></div></body><script>// 1. 获取导航栏:利用事件委托触发子节点的onclick事件var u01 = document.getElementsByClassName("u01")[0];// 2. 获取显示区块var div = document.getElementsByClassName("d");// 3. 给导航栏添加click事件:每当点击导航栏中的每一个列表项时显示对应的区块u01.addEventListener("click", show, false);// 4. 给导航栏添加mouseover事件:每当点击导航栏中的每一个列表项时显示对应的区块u01.addEventListener("mouseover", show, false);//事件回调函数function show(ev) {// 1. 每当点击时先清空导航栏原有激活样式Array.from(ev.target.parentNode.children).forEach(function (item) {item.classList.remove("active");});// 2. 再对点击的节点激活样式ev.target.classList.toggle("active");// 3. 导航栏之后再清空显示区块的原有激活样式Array.from(div).forEach(function (item) {item.classList.remove("active");});// 4. 在显示区块中查询data-index与导航栏的data-index相等的内容,将它设置为激活Array.from(div).forEach(function (item) {if (item.dataset.index === ev.target.dataset.index) {item.classList.add("active");}});}</script></html>

1.原点随图片数量动态生成2.使用css样式来进行激活原点、显示对应图片样式3.使用html data-*属性建立每一个原点与每一个显示图片相同的索引,每当点击原点时就会激活相同索引的显示图片4.使用事件委托机制为每一个小圆点添加点击事件5.翻页按钮利用触发激活原点进行翻页的机制6.使用定时器实现移入移出轮播图区域暂停和继续翻页效果
<!DOCTYPE html><html lang="zh_hans"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>轮播图</title><style>/*父容器属性*/.car-box {position: relative;margin: 0 auto;width: 1000px;height: 350px;}.car-box .slider {width: 1000px;height: 350px;display: none;}.car-box .slider.active {display: block;}/*原点列表样式*/.car-box .point-list {position: absolute;left: 50%;margin-left: -38px;top: 310px;}.car-box .point-list .point {display: inline-block;width: 12px;height: 12px;margin: 0 5px;background-color: white;border-radius: 100%;}.car-box .point-list .point:hover {cursor: pointer;}.car-box .point-list .point.active {background-color: black;}/*跳转按钮样式*/.skip {position: absolute;top: 140px;display: inline-block;width: 40px;height: 80px;text-align: center;line-height: 80px;background-color: lightgray;color: white;opacity: 0.2;font-size: 36px;}.car-box .prev {left: 0;}.car-box .next {right: 0;}.car-box .skip:hover {cursor: pointer;opacity: 0.5;color: black;}</style></head><body><div class="car-box"><!--图片--><imgsrc="./images/banner1.jpg"alt=""class="slider active"data-index="1"/><img src="./images/banner2.jpg" alt="" class="slider" data-index="2" /><img src="./images/banner3.jpg" alt="" class="slider" data-index="3" /><img src="./images/banner4.jpg" alt="" class="slider" data-index="4" /><!--原点列表--><div class="point-list"><!--应该随图片数量动态生成<span class="point active" data-index="1"></span><span class="point" data-index="2"></span><span class="point" data-index="3"></span><span class="point" data-index="4"></span>--></div><!--跳转按钮--><span class="skip prev"><</span><span class="skip next">></span></div></body><script>//获取图片var imgs = document.querySelectorAll(".slider");//获取原点列表var plist = document.querySelector(".point-list");//动态生成原点imgs.forEach(function (item, index) {var span = document.createElement("span");span.classList.add("point");//第一个默认是激活样式if (index === 0) {span.classList.add("active");}//添加索引,和图片索引进行关联span.dataset.index = item.dataset.index;plist.appendChild(span);});//获取所有小圆点var point = document.querySelectorAll(".point");//使用事件委托为每一个小圆点添加点击事件plist.addEventListener("click",function (ev) {//如果点击的小圆点的索引值和图片的索引值一样则激活样式imgs.forEach(function (item) {if (item.dataset.index === ev.target.dataset.index) {//清除图片原有激活样式imgs.forEach(function (item) {item.classList.remove("active");});//设置图片激活item.classList.add("active");//清除小圆点原有激活样式和设置小圆点激活setPorintActive(item.dataset.index);}});},false);//公共函数:设置小圆点激活function setPorintActive(imgIndex) {//清除小圆点原有激活样式point.forEach(function (item) {item.classList.remove("active");});//设置小圆点激活point.forEach(function (item) {if (item.dataset.index === imgIndex) {item.classList.add("active");}});}//获取翻页按钮var skips = document.querySelectorAll(".skip");//给翻页按钮添加点击事件skips.item(0).addEventListener("click", skipImg, false);skips.item(1).addEventListener("click", skipImg, false);//翻页函数function skipImg(ev) {// 1. 找到当前正在显示的图片var currentImg = null;imgs.forEach(function (img) {if (img.classList.contains("active")) {currentImg = img;}});// 2. 判断是否点击了前一页if (ev.target.classList.contains("prev")) {// 1. 先清空当前图片的激活样式currentImg.classList.remove("active");// 2. 再把当前页设置为前一页currentImg = currentImg.previousElementSibling;// 3. 把当前页激活,为防止越界,先判断前一页存不存在if (currentImg !== null && currentImg.nodeName === "IMG") {//存在则激活currentImg.classList.add("active");} else {//不存在则直接跳转到最后一页currentImg = imgs[imgs.length - 1];currentImg.classList.add("active");}}// 3. 判断是否点击了后一页if (ev.target.classList.contains("next")) {// 1. 先清空当前图片的激活样式currentImg.classList.remove("active");// 2. 再把当前页设置为后一页currentImg = currentImg.nextElementSibling;// 3. 把当前页激活,为防止越界,先判断后一页存不存在if (currentImg !== null && currentImg.nodeName === "IMG") {//存在则激活currentImg.classList.add("active");} else {//不存在则直接跳转到第一页currentImg = imgs[0];currentImg.classList.add("active");}}// 4. 关联小圆点高亮setPorintActive(currentImg.dataset.index);}//获取轮播图容器var box = document.querySelector(".car-box");//定义一个定时器,用来清空定时器var timer = null;// 1. 当鼠标移出轮播图区域时,启动定时器box.addEventListener("mouseout", startTimer, false);// 2. 当鼠标移入轮播图区域时,清空定时器box.addEventListener("mouseover", clearTimer, false);//启动定时器函数function startTimer() {//定义一个点击事件var click = new Event("click");//间歇式执行,间隔为2秒setInterval(function () {//使用事件派发向翻页按钮派发点击事件,触发翻页函数skips.item(1).dispatchEvent(click);}, 2000);}//清除定时器函数function clearTimer() {clearInterval(timer);}</script></html>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号