js实现移动端轮播图滑动切换
本文实例为大家分享了js实现移动端轮播图滑动切换的具体代码,供大家参考,具体内容如下
移动端手势
轮播图分析
1、自动轮播且无缝[定时器、过渡动画]
2、分页器要随着图片的轮播而改变[根据索引切换]
3、滑动效果[touch事件]
4、图片随着分页器变化
5、滑动结束的时候,如果滑动的距离不超过屏幕的1/3,就恢复回去[过渡]
6、滑动结束的时候,如果滑动的距离超过屏幕的1/3,就切换[滑动方向+过渡]]
html页面结构
js部分
/*动态设置过渡*/
varaddTransition=function(ele){
ele.style.transition="all.6s";
ele.style.webkitTransition="all.6s";
};
/*移除过渡效果*/
varremoveTransition=function(ele){
ele.style.transition="none";
ele.style.webkitTransition="none";
};
/*设置容器平移--也就是滑动动画
ele:当前元素
xwidth:平移的距离
*/
varsetTranslateX=function(ele,xwidth){
ele.style.transform="translateX("+xwidth+"px)";
ele.style.webkitTransform="translateX("+xwidth+"px)";
}
varbanner=function(){
/**轮播图分析*/
/**1自动轮播且无缝[定时器、过渡动画]
*2点要随着图片的轮播而改变[根据索引切换]
*3滑动效果[touch事件]
*4图片随着点而变化
*5滑动结束的时候,如果滑动的距离不超过屏幕的1/3,就恢复回去[过渡]
*6滑动结束的时候,如果滑动的距离超过屏幕的1/3,就切换[滑动方向+过渡]]
*/
vartimer=''
/*封装定时器函数*/
varstartInterval=function(){
timer=setInterval(function(){
index++;//基于索引做位移
addTransition(imgBox);//为轮播图片组的ul设置过渡函数
setTranslateX(imgBox,-index*width);//根据当前索引值计算平移的距离
},2000);
}
varbanner=document.querySelector(".jd_banner");
varwidth=banner.offsetWidth;//屏幕的宽度
varimgBox=banner.querySelector("ul:first-child");//轮播图片ul
varlength=imgBox.querySelectorAll("li").length;//图片的个数
varpointBox=banner.querySelector("ul:last-child");//分页器ul
varpoints=pointBox.querySelectorAll("li");//分页器集合
varindex=1;//初始化索引,由于要无缝衔接,索引从1开始
startInterval();
/*transitionend事件:当元素过渡动画结束后执行
每次轮播动画结束后,判断当前索引值
*/
imgBox.addEventListener("transitionend",function(){
if(index>=length-1){
index=1;
//清过渡,瞬间定位imgBox
removeTransition(imgBox);
setTranslateX(imgBox,-index*width);
}
//滑动的时候也需要无缝
elseif(index<=0){
index=8;
removeTransition(imgBox);
setTranslateX(imgBox,-index*width);
}
showPoint(index-1);//改变分页器状态
});
varshowPoint=function(index){
for(vari=0;iwidth/3){
//切换
if(distanceX>0){
//上一张
index=index-1;
}else{
//下一张
index=index+1;
}
addTransition(imgBox);//设置过渡动画
setTranslateX(imgBox,-index*width);
if(index>=9){
index=1;
}
if(index<=0){
index=8;
}
showPoint(index-1);
}else{
//不满足滑动条件,回退到之前的状态
addTransition(imgBox);
setTranslateX(imgBox,-index*width);
showPoint(index-1);
}
}
//****最好做一次参数的重置
startX=0;
distanceX=0;
isMove=false;
//******为了严谨,再清一次定时器
clearInterval(timer)
//加上定时器
startInterval();
});
};
总结
原生js实现滑动切换的原理主要还是利用移动端的手势事件
- touchstart当手指触摸屏幕时触发
- touchmove当手指在屏幕中滑动的时候触发
- touchend当手指离开屏幕时触发
利用touch相关事件实现移动端常见滑动效果和移动端常见的手势事件。
而swiper插件的底层实现原理也是这个,因此,为了快速开发,还是使用swiper插件最好
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。