JS实现手动和自动轮播效果
开门见山,今天要实现的轮播效果如下图所示:(轮播自动播放;点击左右按钮实现上一张和下一张的功能;鼠标移入轮播暂停;鼠标移出轮播自动播放;小圆点随着图片的变化而变化,点击哪个小圆点回到哪张图片;底部显示第几张图片)
一、献上html及css
html:
<div class="pic"> <!--上一页--> <a id="prev" href="javascript:;"></a> <!--轮播图--> <img id="img" src="img/img1.jpg" alt=""> <!--小圆点--> <div class="circle"> <span class="active"></span> </div> <!--下一页--> <a id="next" href="javascript:;"></a> </div> <p id="txt">这是第 <span>1</span> 张图片</p>
css:
*{
margin: 0; padding: 0;
}
a{
text-decoration: none;
}
.wrap{
width: 1000px; height: 800px; background: url(img/bg.jpg) no-repeat; position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); background-size: 100% 100%;
}
prev,#next{
position: absolute; width: 25px; height: 45px; background: url(img/ar.png) no-repeat; top: 155px;
}
prev{
left: 13px;
}
next{
transform: rotate(180deg); right: 13px;
}
.pic{
width: 536px; height: 356px; position: absolute; top: 170px; left: 50%; transform: translateX(-50%);
}
img{
vertical-align: top; width: 536px; height: 356px;
}
txt{
width: 536px; height: 71px; position: absolute; left: 50%; bottom: 185px; text-align: center; font: 20px/71px "微软雅黑"; color: #666; transform: translateX(-50%);
}
.circle{
text-align: center; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%);
}
.circle span{
border: 1px solid #fff; width: 5px; height: 5px; border-radius: 50%; display: inline-block; margin: 0 5px; cursor: pointer;
}
.circle span.active{
background-color: #fff;
}
二,javaScript的实现
1,获取元素
let pic = document.querySelector('.pic');
let prev = document.querySelector('#prev');
let next = document.querySelector('#next');
let txt = document.querySelector('#txt span');
//轮播图数组
let arr = ['img/img1.jpg','img/abc.jpg','img/img3.jpg','img/img4.jpg','img/img5.jpg'];
let num = 0 ;
let circle = document.querySelector('.circle');
let img = document.querySelector('#img');
let timer = null;
2,渲染并获取小圆点
//渲染轮播图上的小圆点
for(let i = 0;i
circle.innerHTML+=`<span></span>`
}
let circleAll = document.querySelectorAll('.circle span');
3,轮播时需要调用的函数
//轮播函数
let loop = (addNum,flag)=>{
num = num+addNum; if(flag){ if(num == arr.length){ num = 0; } }else{ if(num < 0){ num = arr.length-1; } } for(let i = 0;i<circleAll.length;i++){ circleAll[i].classList.remove('active'); } circleAll[num].classList.add('active'); img.src = arr[num]; txt.innerHTML= num+1;
};
4,进入页面时自动播放轮播
//定时器
let auto = ()=>{
timer = setInterval(()=>{ let addNum =1; let flag = true; loop(addNum,flag); },1000);
};
//进入页面时自动轮播
auto();
5,鼠标的移入移出
//鼠标移入清除定时器
pic.onmouseover=function () {
clearInterval(timer);
};
//鼠标移出启动定时器
pic.onmouseout =function () {
auto();
};
6,实现上一张及下一张功能
//下一张
next.onclick = function () {
let addNum = 1; let flag = true; loop(addNum,flag);
};
//上一张
prev.onclick = function () {
let addNum = -1; let flag = false; loop(addNum,flag);
};
7,实现点击小圆点切换图片的功能
//点击圆点切换图片
circleAll.forEach((item,index)=>{
item.onclick=function () { img.src = arr[index]; txt.innerHTML= index+1; for(let i = 0;i<circleAll.length;i++){ circleAll[i].classList.remove('active'); } circleAll[index].classList.add('active'); //num赋值为index,使鼠标移出后图片播放从当前的图片开始
继续自动轮播
num = index; }
})
整个轮播的功能就实现,欢迎大家交流
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
70%的Java程序员不知道为啥 ConcurrentHashMap 读操作不需要加锁?
作者:上帝爱吃苹果 目录1.ConcurrentHashMap的简介2.get操作源码3.volatile登场4.是加在数组上的volatile吗?5.用volatile修饰的Node6.总结 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢? ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现。JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点)JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就...
- 下一篇
论mvn snapshot版本的危害
今天遇到的一个aone编译不通过的问题,再一次证明了在生产环境依赖mvn snapshot版本的风险和危害。 起因 针对一个变更修改代码,本地运行单元测试的时候编译不通过。昨天运行单元测试的时候还是正常的,而且编译不同过的类和引起编译失败的二方库都没有被修改到。 排查 尝试在aone预发环境进行部署,编译失败; 下掉aone预发环境所有变更,直接部署master分支,成功; 在个人pc上编译打包应用的master分支,编译失败; 2,3两步使用的maven版本是一样的,而且都是对master分支打包,但个人pc上却出现了编译失败。之后,登陆aone预发环境打包master成功的打包机,在代码目录下执行aone构建日志中的打包命令,打包成功: 执行下面的mvn命令,却出现了编译错误: mvn -U clean package -Dmaven.test
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用