html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type='text/css'>
html,body{
width: 500px;
height:500px;
overflow: hidden;
margin: 0 auto;
background:black;
}
.divSwrap{
width: 2000px;
height: 500px;
position: relative;
left:0px;
transition:0.5s linear;
}
.divSwrap div{
float: left;
text-align: center;
background: #ccc;
width: 500px;
line-height: 500px;
}
</style>
</head>
<body>
<div class="divSwrap">
<div class="img"><h1>1</h1></div>
<div class="img"><h1>2</h1></div>
<div class="img"><h1>3</h1></div>
<div class="img"><h1>4</h1></div>
</div>
<script type="text/javascript" src='toch.js'></script>
</body>
</html>
js代码如下:
function touchSlide(objectClassName,aImgClassName,zoom){
var oDiv=document.getElementsByClassName(objectClassName)[0];
var endX;//滑动结束时的X轴坐标
var startX;//滑动开始时deX轴坐标
var scroll;//滑动滚出去的距离
var index=0;//当前显示的第几个div;从0开始计算;
var aImg=document.getElementsByClassName(aImgClassName);
var imgLength=aImg.length;
var aImgWidth=aImg[0].offsetWidth*(imgLength-1);
var imgWidth=aImg[0].offsetWidth;
oDiv.addEventListener("touchstart",function(e){
var touch=e.touches[0];
startX=touch.pageX;
});
oDiv.addEventListener("touchmove",function(e){
var touch=e.touches[0];
var moveLeft=oDiv.offsetLeft;//滑动时的当前Left的距离;
endX=touch.pageX;
scroll=endX-startX;
//console.log(scroll);
oDiv.style.left=moveLeft+scroll+'px';
});
oDiv.addEventListener("touchend",function(e){
var endLeft=oDiv.offsetLeft;
if(endLeft>0){
oDiv.style.left=0+'px';
}else if(endLeft<-aImgWidth){
oDiv.style.left=-aImgWidth+'px';
}else{
var scrollPercent=Math.abs(scroll)/imgWidth;
if(scrollPercent>zoom){
if(scroll<0){//往左滑动
index++;
index=index>(imgLength-1)? index-1: index;
oDiv.style.left=-imgWidth*index+'px';
}else if(scroll>0){//往右滑动
index--;
index=index<0? 0: index;
oDiv.style.left=-imgWidth*index+'px';
}
}else{
oDiv.style.left=-imgWidth*index+'px';
}
}
});
}
touchSlide('divSwrap','img',0.2);
请各位提个好点的建议!如果可以顺便提个好点的思路。我觉得哈,这里最关键的就是如何判断当前滑动的是第几张,要往哪滑,以实现序号的增减,我的思路方法已经有了,但是感觉代码写的不完美,特别是在手机上运行的时候感觉不大好~
移动浏览器上要加上下面的meta标签,才能让像素对齐
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
将touchmove和touchend的监听放到touchstart时候才绑定
在touchend时将touchmove和touchend解绑
你的逻辑有问题,在touchmove的时候,不是减去刚触摸的坐标
应该在触摸移动一次就要更新开始的坐标