轮播图demo左右滑动-移动端
1、和前三篇的素材都差不多,这里实现的是移动端的图片轮播,使用的是targetTouches获取到点击的位置和移动到的位置,相减就为移动的距离
2、在轮播的时候,很多代码重复了,可以加一个方法优化,这里为了更加直观就不加了
有注释,直接上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>轮播图demo左右滑动-移动端</title>
<style>
li,i,ul{
list-style: none;
margin: 0;
padding: 0;
}
body,html{
margin: 0;
padding: 0;
width: 100vw;
}
.swiper{
margin: 100px auto;
height: 200px;
width: 100vw;
position: relative;
}
.swiper ul{
position: absolute;
top: 0;
left: 0;
height: 200px;
width: 600%;
margin-left: -100%;
}
.swiper ul li{
width: 100vw;
height: 200px;
float: left;
}
.swiper img{
display: block;
width: 100%;
height: 100%;
}
.bullets{
position: absolute;
bottom: 10px;
right: 20px;
width: 200px;
height: 20px;
text-align: right;
}
.bullets i{
display: inline-block;
height: 5px;
width: 5px;
border: 3px solid #cccccc;
background-color: #e0e0e0;
border-radius: 5px;
margin: 0 3px;
}
.bullets .active{
background-color: #ffffff;
width: 15px;
}
</style>
</head>
<body>
<div class="swiper">
<!-- 轮播的图片 -->
<ul></ul>
<!-- 小圆圈 -->
<div class="bullets"></div>
</div>
<script>
let num=0
let startX=0
let moveX=0
let flag=false
let swiper=document.querySelector('.swiper')
let ul=document.querySelector('.swiper ul')
let bullets=document.querySelector('.bullets')
let arr=['./img/main-back-1.jpg','./img/main-back-2.jpg','./img/main-back-3.jpg','./img/main-back-4.jpg']
let html=''
for(let i=0;i<arr.length;i++){
html+='<li><a><img src='+arr[i]+'></img></a></li>'
let ii=document.createElement('i')
ii.setAttribute('index',i)
bullets.appendChild(ii)
}
ul.innerHTML=html
let child_node=ul.children
let length=child_node.length
let last_node=child_node[child_node.length-1].cloneNode(true)
let first_node=child_node[0].cloneNode(true)
ul.insertBefore(last_node,child_node[0])
ul.appendChild(first_node)
bullets.children[0].className='active'
let timer=setInterval(function(){
num++
ul.style.transition='all .3s'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
},3000)
ul.addEventListener('transitionend',function(){
if(num>=length){
num=0
ul.style.transition='none'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
}else if(num<0){
num=length-1
ul.style.transition='none'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
}
bullets.children[num].style.transition='all .3s'
bullets.querySelector('.active').classList.remove('active')
bullets.children[num].classList.add('active')
})
ul.addEventListener('touchstart',function(e){
startX=e.targetTouches[0].pageX
clearInterval(timer)
})
ul.addEventListener('touchmove',function(e){
moveX=e.targetTouches[0].pageX-startX
ul.style.transition='none'
let translateX=-num*swiper.offsetWidth+moveX
ul.style.transform='translateX('+translateX+'px)'
flag=true
e.preventDefault()
})
ul.addEventListener('touchend',function(e){
if(flag){
if(Math.abs(moveX)>50){
if(moveX>0){
num--
}else{
num++
}
ul.style.transition='all .3s'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
}else{
ul.style.transition='all .1s'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
}
}
timer=setInterval(function(){
num++
ul.style.transition='all .3s'
let translateX=-num*swiper.offsetWidth
ul.style.transform='translateX('+translateX+'px)'
},3000)
})
</script>
</body>
</html>
作为自己学习过程的总结,菜鸡一枚,有什么问题与错误,请不吝赐教