JS实现手动和自动轮播效果

简介: 如何实现一个轮播图呢?

开门见山,今天要实现的轮播效果如下图所示:(轮播自动播放;点击左右按钮实现上一张和下一张的功能;鼠标移入轮播暂停;鼠标移出轮播自动播放;小圆点随着图片的变化而变化,点击哪个小圆点回到哪张图片;底部显示第几张图片)
1565143305_1_

一、献上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;
}

})

整个轮播的功能就实现,欢迎大家交流

相关文章
|
JavaScript 前端开发
javascript深拷贝和浅拷贝以及实现方法(推荐)
javascript深拷贝和浅拷贝以及实现方法(推荐)
532 0
javascript深拷贝和浅拷贝以及实现方法(推荐)
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: &lt;!-- &lt;input type=&quot;text&quot; id=&quot;text&quot;&gt; --&gt; 请选择省份: &lt;select name=&quot;&quot; id=&quot;provinces&quot;&gt; &lt;!-- &lt;option value=&quot;江苏省&quot;&gt;江苏省&lt;/option&gt;
|
JavaScript 前端开发
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
167 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
219 0
|
JavaScript
JS中实现或退出全屏
JS中实现或退出全屏
153 0
|
前端开发 JavaScript
前端:JS实现双击table单元格变为可编辑状态
前端:JS实现双击table单元格变为可编辑状态
365 0
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
276 1
|
算法 前端开发 JavaScript
【前端算法】用JS实现快速排序
理解数组方法里面运用到的算法,splice 和 slice的区别
113 0
|
JavaScript 前端开发 算法
【前端算法】javaScript实现二分查找
如何使用JS实现一个合格的二分查找
191 0