首页 > 其他分享 >js实现淡入淡出轮播图

js实现淡入淡出轮播图

时间:2022-10-08 23:34:44浏览次数:48  
标签:box 轮播 淡入淡出 imgIndex 切换 active li js

淡入淡出轮播图 实现功能:

1、鼠标离开自动轮播,鼠标滑入停止自动轮播

2、点击圆圈或箭头,更换轮播图片

实现思路:

1、搭建框架:通过html、css搭建框架渲染样式,通过把第一张设置透明度为1,其他图片透明度为0的方法实现淡入淡出,透明度可以加一个过渡让转换更流畅;

2、展示图片:设置显示轮播图片默认第一张;设置切换图片事件,先移除当前图片再添加一个具有active效果的轮播图片;

3、点击切换:设置圆圈以及左右箭头点击切换下一张事件,注意:切换到最左侧需要把索引改为最后一张,切换到最右侧则把索引改为第一张;

4、自动轮播:设置定时器,鼠标滑入停止自动轮播、离开继续自动轮播事件。

代码如下:

js:

   let box = document.querySelector('.box')         let imgs = document.querySelectorAll('.img-box li')         let circles = document.querySelectorAll('.circle-box li')         let leftBtn = document.querySelector('.left-btn')         let rightBtn = document.querySelector('.right-btn')
        // 显示图片的索引         let imgIndex = 0
        // 切换展示到指定图片         function play(index){             // 遍历每一项,然后移除class类名为active的元素节点             imgs.forEach(item=>{                 item.classList.remove('active')             })             // 添加带有active效果的元素节点             imgs[index].classList.add('active')
            // 点亮圆圈(同上)             circles.forEach(item=>{                 item.classList.remove('active')             })             circles[index].classList.add('active')         }
        // 点击左侧切换上一张         leftBtn.onclick = function(){             // 根据索引切换(索引是0时变为最后一张,其他递减)             imgIndex = imgIndex == 0 ? imgs.length-1 : --imgIndex             // 执行切换             play(imgIndex)         }
        // 点击右侧切换下一张         rightBtn.onclick = function(){             // 索引(判断最后一张则下一个展示第一张,否则递增)             imgIndex = imgIndex == imgs.length-1 ? 0 : ++imgIndex             // 执行切换             play(imgIndex)         }
        // 点击圆圈切换相应图片(圆圈图片都是数组所以要遍历)         circles.forEach((item,index)=>{             item.onclick = function(){                 // 更改索引                 imgIndex = index                 // 执行切换                 play(imgIndex)             }         })
        // 自动轮播         // 鼠标离开盒子轮播继续         // 设置定时器         let timer = null         // 整个文档加载后触发鼠标离开自动轮播继续事件         window.oncload = box.onmouseout = function(){             timer = setInterval(function(){                 // 调用右键按钮事件                 rightBtn.click()             },2000)         }
        // 鼠标悬停在盒子上轮播停止         box.onmouseover = function(){             // 清除定时器             clearInterval(timer)         }    

html:

<div class="box">         <!-- 图片 -->         <ul class="img-box">             <li class="active">                 <img src="./image/a.jpg" alt="">             </li>             <li>                 <img src="./image/b.jpg" alt="">             </li>             <li>                 <img src="./image/c.jpg" alt="">             </li>             <li>                 <img src="./image/d.jpg" alt="">             </li>             <li>                 <img src="./image/e.jpg" alt="">             </li>         </ul>         <!-- 圆圈 -->         <ul class="circle-box">             <li class="active"></li>             <li></li>             <li></li>             <li></li>             <li></li>         </ul>         <!-- 左右按钮 -->         <span class="left-btn"><</span>         <span class="right-btn">></span> </div>     css:   *{             margin: 0;             padding: 0;         }         ul{             list-style: none;         }         .box{             position: relative;             width: 800px;             height: 300px;             margin: 100px auto;         }         .img-box li{             position: absolute;             top: 0;             left: 0;             width: 800px;             height: 300px;             /* 设透明度为0 */             opacity: 0;             transition: opacity 2s;         }         /* 第一张显示 */         .img-box li.active{             opacity: 1;         }         .img-box img{             width: 100%;             height: 100%;         }         /* 圆圈 */         .circle-box{             position: absolute;             left: 50%;             bottom: 10px;             transform: translateX(-50%);         }         .circle-box li{             float: left;             width: 8px;             height: 8px;             margin-right: 8px;             border-radius: 50%;             background: rgb(195, 191, 191);             border: 2px solid black;             cursor: pointer;         }         .circle-box li.active, .circle-box li:hover{             background: #fff;         }         /* 左右按钮 */         .box span{             position: absolute;             top: 50%;             transform: translateY(-50%);             font-size: 35px;             color: rgba(255,255,255,.3);             cursor: pointer;         }         .box span:hover{             color: rgba(255,255,255,.8);             background: rgba(0,0,0,.5);         }         .left-btn{             left: 0;             padding: 10px 7px 10px 3px;         }         .right-btn{             right: 0;             padding: 10px 3px 10px 7px;         }   实现效果:

 

 

 

标签:box,轮播,淡入淡出,imgIndex,切换,active,li,js
From: https://www.cnblogs.com/gmyd/p/16770495.html

相关文章

  • Angular 打包 js文件 过大
    1、加了--prod参数后,angular-cli会把用不到的包都删掉//package.json中"scripts":{..."build":"ngbuild--prod"...}2、nginx开启gzip优化、在nginx中server......
  • Vue3组件库打包指南,一次生成esm、esm-bundle、commonjs、umd四种格式
    本文为Varlet组件库源码主题阅读系列第二篇,读完本篇,你可以了解到如何将一个Vue3组件库打包成各种格式上一篇里提到了启动服务前会先进行一下组件库的打包,运行的命令为:v......
  • js原生ajax发起的请求xhr
    使用xhr发起GET请求步骤:发起一个GET请求例子://1、创建一个xhr对象varxhr=newXMLHttpRequest();//2、调用xhr.open()函数请求方式获取地址xhr.open('GET','htt......
  • #yyds干货盘点#慎用JSON.stringfy
    项目中遇到一个bug,一个组件为了保留一份JSON对象,使用JSON.stringify将其转换成字符串,这样做当然是为了避免对象是引用类型造成数据源的污染。但发现后面使用JSON.pars......
  • js 日期格式化
    用法://2022-10-0622:01:09formatDate("yyyy-MM-ddhh:mm:ss",newDate());//2022-10-0622:01:09dateFormat("yyyy-MM-ddhh:mm:ss",newDate(1665064915000));......
  • JSON语法格式
    javascript作用:改变HTML内容JavaScript内嵌于HTML网页中,通过浏览器内置的JavaScript引擎进行解释执行,把一个原本只用来显示的页面转变成支持用户交互的页面程序。Javascr......
  • js字符串
    字符串声明1.直接声明 varstr='hello'2.使用new关键字(会开辟新的内存空间)varstr=newString('hello')newString和String的区别 前者开辟空间后者只是进行......
  • video.js使用总结
    video.js使用总结video.js是通过HTML5将原生的video标签进行渲染的js开源工具。拥有更多的API,进行个性化定制。在vue项目中引入video.jspackage.json:"dependencies":......
  • vue.js3:用el-loading显示加载动画([email protected] / [email protected])
    一,el-loading1,文档地址:https://element-plus.gitee.io/zh-CN/component/loading.html2, 查看element-plus的版本:liuhongdi@lhdpc:/data/vue/imgtouch$npmlist......
  • net中c#教程 Json字符串的常用操作
    json字符串格式的出现,大大地方便了不同系统间的数据传输,无论是Net项目还是Java项目都适用。今天就分享几个json的常用操作。我们是基于Newtonsoft.Json这个第三方类库实现......