批改状态:合格
老师批语:都学会调试代码了, 不错, 点赞
轮播图代码
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>经典轮播图</title><style>ul,li {margin: 0;padding: 0;list-style: none;}.box {/*定位父级*/position: relative;width: 1000px;height: 350px;margin: 0 auto;}.box .slider {width: 1000px;height: 350px;display: none;}.box .slider.active {display: block;}.box .point-list {position: absolute;/*绝对定位的环境下的水平居中方式*/left: 50%;margin-left: -38px;top: 310px;}.box .point-list .point {display: inline-block;width: 12px;height: 12px;margin: 0 5px;background-color: white;border-radius: 100%;}.box .point-list .point.active {background-color: black;}.box .point-list .point:hover {cursor: pointer;}.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;}.box .prev {left: 0;}.box .next {right: 0;}.box .skip:hover {cursor: pointer;opacity: 0.5;color: black;}</style></head><body><div class="box"><imgsrc="banner/banner1.jpg"alt=""data-index="1"class="slider active"/><img src="banner/banner2.jpg" alt="" data-index="2" class="slider" /><img src="banner/banner3.jpg" alt="" data-index="3" class="slider" /><img src="banner/banner4.jpg" alt="" data-index="4" class="slider" /><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><script>var cl = console.log.bind(console);//轮播图片组var imgs = document.querySelectorAll("img");cl(imgs);var pointList = document.querySelector(".point-list");//动态生成小圆点imgs.forEach(function (img, index) {var span = document.createElement("span");if (index === 0) span.classList.add("point", "active");span.classList.add("point");//将小圆点与当前显示的图片的索引进行关联span.dataset.index = img.dataset.index;pointList.appendChild(span);});// cl(pointList);//为了正确的设置小圆点高亮,需要获取到所有的小圆点var points = document.querySelectorAll(".point");//事件代理/委托:给小圆点添加点击事件pointList.addEventListener("click",function (ev) {// cl(ev.target);imgs.forEach(function (img) {if (img.dataset.index === ev.target.dataset.index) {//先取消所有图片的激活属性imgs.forEach(function (img) {img.classList.remove("active");});//设置当前图片的激活样式img.classList.add("active");//公共函数:设置小圆点当前的高亮,必须与图片一一对应,同步setPointActive(img.dataset.index);}});},false);//公共函数:setPointActivefunction setPointActive(imgIndex) {//清除原来的所有的小圆点上的高亮points.forEach(function (point) {point.classList.remove("active");});//为当前小黑点设置高亮points.forEach(function (point) {if (point.dataset.index === imgIndex) point.classList.add("active");});}//获取翻页按钮var skip = document.querySelectorAll(".skip");//添加事件skip.item(0).addEventListener("click", skipImg, false);skip.item(1).addEventListener("click", skipImg, false);//翻页事件回调function skipImg(ev) {//遍历并找到当前正在显示的图片var currentImg = null;imgs.forEach(function (img) {if (img.classList.contains("active")) currentImg = img;});//1.判断是否是点击了显示前一张if (ev.target.classList.contains("prev")) {currentImg.classList.remove("active");currentImg = currentImg.previousElementSibling;// cl(currentImg);//如果存在前一张if (currentImg !== null && currentImg.nodeName === "IMG")//显示当前图片currentImg.classList.add("active");else {//否则就显示最后一张,形成循环currentImg = imgs[imgs.length - 1];currentImg.classList.add("active");}}//2.判断是否点击了显示下一张if (ev.target.classList.contains("next")) {currentImg.classList.remove("active");currentImg = currentImg.nextElementSibling;// cl(currentImg);//如果存在下一张if (currentImg !== null && currentImg.nodeName === "IMG")//显示当前图片currentImg.classList.add("active");else {//否则就显示第一张,形成循环currentImg = imgs[0];currentImg.classList.add("active");}}//调用公共函数:设置小圆点当前的高亮,与图片一一对应setPointActive(currentImg.dataset.index);}var box = document.querySelector(".box");var timer = null;//1.当鼠标移出轮播图区域时,启动定时器,每2秒自动切换图片box.addEventListener("mouseout", startTimer, false);//2.当鼠标移入轮播图区域时,清除定时器,由用户点击操作box.addEventListener("mouseover", clearTimer, false);//启动定时器function startTimer() {var click = new Event("click");//setInterval():间歇式执行,单位毫秒if (timer != null) {//判断计时器是否为空clearInterval(timer);timer = null;}timer = setInterval(function () {skip.item(1).dispatchEvent(click);}, 2000); //启动计时器,调用overs函数,}//清除定时器function clearTimer() {clearInterval(timer);}</script></body></html>
轮播图效果图
选项卡代码
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>选项卡</title><style>* {margin: 0;padding: 0;}a {text-decoration: none;color: #555;}a:hover {text-decoration: underline;color: red;}li {list-style: none;}li:hover {cursor: default;}.tabs {width: 300px;height: 300px;margin: 30px;background-color: #ddd;display: flex;flex-direction: column;}.tab {height: 36px;display: flex;}.tab li {flex: auto;text-align: center;line-height: 36px;background-color: #fff;}.tab li.active {background-color: #ddd;}/* 默认所有选项卡只有一个显示,其它隐藏 */.item {padding: 20px;display: none;}.item.active {display: block;}</style></head><body><div class="tabs"><!-- 导航 --><ul class="tab"><li class="active" data-index="1">水果</li><li data-index="2">手机</li><li data-index="3">汽车</li></ul><!-- 详情1 --><ul class="item active" data-index="1"><li><a href="">哈密瓜</a></li><li><a href="">葡萄</a></li><li><a href="">香蕉</a></li></ul><!-- 详情2 --><ul class="item" data-index="2"><li><a href="">华为</a></li><li><a href="">小米</a></li><li><a href="">OPPO</a></li></ul><!-- 详情2 --><ul class="item" data-index="3"><li><a href="">吉利</a></li><li><a href="">奇瑞</a></li><li><a href="https://www.baidu.com">长城</a></li></ul></div><script>var cl = console.log.bind(console);//导航:事件委托var tab = document.querySelector(".tab");//列表var items = document.querySelectorAll(".item");//给导航绑定点击事件tab.addEventListener("click", show, false);//给导航绑定鼠标移动事件tab.addEventListener("mouseover", show, false);//事件回调函数function show(ev) {cl(ev.target);//1、清空导航原有的激活ev.target.parentNode.childNodes.forEach(function (item) {if (item.nodeType === 1) item.classList.remove("active");});//2、将当前用户正在点击的导航设置为激活ev.target.classList.add("active");//3、清空列表的原有激活items.forEach(function (item) {item.classList.remove("active");});//4、在列表中查询data-index与导航的data-index相等的内容,将它设置为激活items.forEach(function (item) {if (item.dataset.index === ev.target.dataset.index)item.classList.add("active");});}</script></body></html>
选项卡效果图
总结:
1.评论、选项卡、轮播图、懒加载是常用功能,老师讲得内容非常实用。
2.js变量、函数区分大小写。编程时需注意。
3.在使用定时器功能时,图片转换时快时慢,鼠标停留在图片上时,不能正常停止播放。对setInterval方法返回的值做了一个判断,判断是否是空值,若不是空值,则要停止定时器并将值设为空,再重新启动,运行完美。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号