轮播图实现五秒钟自动切换,图片渐渐显示的功能:
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>轮播图渐显功能</title> <style> .box{ position:relative; width: 1200px; height: 400px; margin: 0 auto; } img{ opacity: 0; } .box .slider{ width: 1200px; height: 400px; display: none; /*元素不会被显示。*/ } .box .slider.active{ display: block; /*元素将显示为块级元素,此元素前后会带有换行符 */ } .box .point-list{ position: absolute; left: 50%; margin-left: -48px; top:360px; } .box .point-list .point{ display: inline-block; width: 15px; height: 15px; margin: 0 5px; background-color: white; border-radius:50%; } .box .point-list .point.active{ background-color: black; } .box .point-list .point:hover{ /*cursor 一些不同的光标*/ /*pointer 光标呈现为指示链接的指针(一只手)*/ cursor:pointer; } .skip{ position: absolute; display: inline-block; width: 60px; height: 60px; text-align: center; line-height: 60px; background-color: lightgray; color: black; opacity:0.3; font-size: 36px; top:170px; border-radius:50% ; } .box .prev{ left:0; } .box .next{ right: 0; } .box .skip:hover{ cursor:pointer; opacity: 0.6; color: red; } </style> </head> <body> <div class="box"> <!--轮播图片--> <img src="images/banner1.jpg" alt="" data-index="1" class="slider active"> <img src="images/banner2.jpg" alt="" data-index="2" class="slider"> <img src="images/banner3.jpg" alt="" data-index="3" class="slider"> <!--轮播小圆点--> <div class="point-list"> <!--<span class="point active" data-index="1"></span>--> <!--<span class="point " data-index="2"></span>--> </div> <!--轮播左右切换按钮--> <span class="skip prev"> < </span> <span class="skip next"> > </span> </div> <script> //获取所有图片,将图片列表由HTML集合转为真正的数组类型 var imgs=document.images; var imgArr=Array.prototype.slice.call(imgs,0); // console.log(imgArr); // load: 当页面加载完成会自动调用,防止第一张图片因为透明度为0而不显示 window.addEventListener('load',fadeIn(imgArr[0]),false); //获取小圆点父节点 var pointList=document.getElementsByClassName('point-list')[0]; // 设置小圆点的数量与样式, 与图片的数量关联,实现每添加一张图, 小圆点数量自动更新 // img: 当前元素 index: 当前元素的索引值。 imgArr.forEach(function (img,index) { var span=document.createElement('span'); if(index===0){ span.classList.add('point','active'); }else{ span.classList.add('point'); } //让小圆点的data-index属性与图片的data-index属性一致,使小圆点与图片一一对应 span.dataset.index=img.dataset.index; pointList.appendChild(span); }); // 获取所有的小圆点,将小圆点的html集合, 转为真正的数组 var points=document.getElementsByClassName('point'); pointArr=Array.prototype.slice.call(points,0); // 为小圆点设置点击事件,切换图片 pointArr.forEach(function (point) { point.addEventListener('click',setImgActive,false); }); // 设置图片切换 function setImgActive(event) { // event.target: 当前被点击的对象,就是小圆点 imgArr.forEach(function (img) { // 根据小圆点的data-index值与图片data-index对应关系来确定需要切换的图片 if(img.dataset.index===event.target.dataset.index){ // 去掉原来所有图片上的激活样式 imgArr.forEach(function (img1) { img1.classList.remove('active'); img1.style.opacity='0';//切换图片后修改图片透明度为0 }); // 设置当前图片为显示激活状态 img.classList.add('active'); fadeIn(img); // 设置小圆点的当前激活与高亮状态 setPointActive(img.dataset.index); } }); } // 获取翻页跳转按钮 var skip =document.getElementsByClassName('skip'); var leftskip=document.getElementsByClassName('skip')[0]; var rightskip=document.getElementsByClassName('skip')[1]; // 为翻页按钮添加事件 leftskip.addEventListener('click',skipImg,false); rightskip.addEventListener('click',skipImg,false); function skipImg(event) { // 获取当前正在显示的图片 var currentImg=null; imgArr.forEach(function (img) { //contains(class) 返回布尔值,判断指定的类名是否存在。 if(img.classList.contains('active')){ currentImg=img; } }); // 判断点击的是显示前一个图片 if(event.target.classList.contains('prev')){ // 显示前一个兄弟元素节点 // 移除当前图片高亮, 不要再显示 currentImg.classList.remove('active'); currentImg.style.opacity='0'; // 更新当前图片节点 currentImg=currentImg.previousElementSibling; // 显示前一个兄弟元素节点 if(currentImg!==null && currentImg.nodeName==='IMG'){ // 高亮前一个兄弟节点图片 currentImg.classList.add('active'); }else{ // 如果不存在前一个兄弟节点,则显示最后一个,以此来循环显示 // 高亮最后一个兄弟节点图片 currentImg=imgArr[imgArr.length-1]; currentImg.classList.add('active'); } } // 判断是否是点击了显示后一个图片 if(event.target.classList.contains('next')){ currentImg.classList.remove('active'); currentImg.style.opacity='0'; //console.log( currentImg.style.opacity); currentImg=currentImg.nextElementSibling; // 显示后一个兄弟元素节点 if(currentImg!==null &¤tImg.nodeName==='IMG'){ currentImg.classList.add('active'); }else{ // 如果不存在后一个兄弟节点,则显示第一个,以此来循环显示 // 高亮第一个兄弟节点图片, 索引为0 currentImg=imgArr[0]; currentImg.classList.add('active'); } } fadeIn(currentImg); // 获取当前显示的图片的data-index var imgIndex=currentImg.dataset.index; setPointActive(imgIndex); } // 设置小圆点高亮 function setPointActive(imgIndex) { // 清除小圆点原有的高亮 pointArr.forEach(function (point) { point.classList.remove('active'); }); pointArr.forEach(function (point) { if(point.dataset.index===imgIndex){ point.classList.add('active'); } }); } // 定时器: 每隔5秒自动切换 // 这类自动操作最适合事件模拟器完成 // 这里选择点击下一页的按钮事件来做(上一页也可以,随意) // 利用鼠标移入与移出事件来启动/关闭定时器 var box=document.getElementsByClassName('box')[0]; // 创建定时器并初始化 var timer=null; // 创建鼠标移动事件监听器 // 1. 当鼠标移出轮播图区域时, 启动定时器控制轮播图的播放 box.addEventListener('mouseout',startTimer,false); // 2. 当鼠标移入到轮播图区域时, 清除定时器,由用户点击来控制轮播图的播放 box.addEventListener('mouseover',clearTimer,false); // startTimer: 启动定时器的方法 function startTimer() { // 先生成了一个自定义的点击事件对象 var clickEvent=new Event('click'); timer=setInterval(function () { // 将自定义的点击事件分配给下一页按钮,实现自动点击 rightskip.dispatchEvent(clickEvent); },5000); } // clearTimer: 清除定时器的方法 function clearTimer() { clearInterval(timer); } //渐显函数 function fadeIn(img) { opa=parseInt(window.getComputedStyle(img).opacity);//获取当前图片的透明度,图片透明度一开始设置为0 var timer=setInterval(function () { // console.log(opa); opa = opa+0.15; img.style.opacity=opa; // 当透明度大于或等于1应该停止,关闭定时器 if(opa>=1){ clearInterval(timer); return false; } },200); } </script> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例