1、循环滑动效果(先看效果)
2、如何布局(以下是我的思路)
<style type="text/css">
* {
margin: 0;
padding: 0;
}
#scroll div {
border: 1px solid red;
float: left;
background: #abcdef;
text-align: center;
}
</style>
</head>
<body>
<div id="container" style="position: relative; 100%; height: 90%; overflow: hidden;">
<div id="scroll" style="position: absolute; height: 100%;">
<div>5</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>1</div>
</div>
</div>
</body>
3、触屏移动的算法
具体代码如下:
var scroll = document.getElementById('scroll');
var container = document.getElementById("container")
var clientAtt =
{
document.documentElement.clientWidth,
height: document.documentElement.clientHeight
};
//设置大小
container.style.width = clientAtt.width + 'px';
container.style.height = clientAtt.height + 'px';
scroll.style.width = clientAtt.width * 7 + 'px';
scroll.style.left = -clientAtt.width + 'px';
$("#scroll div").css({clientAtt.width-2+'px',height:clientAtt.height-2+'px','line-height':clientAtt.height-2+'px'});
var initLeft = 0;//物体初始距离
var disStart = 0;//手指触屏距离
scroll.addEventListener("touchstart", function (ev) {
var oEvent = ev || event;
oEvent.preventDefault();
var touch = oEvent.touches[0];//获取手指触屏信息
disStart = touch.clientX;//手指的触屏起点X
initLeft = this.offsetLeft;//物体的起点left
}, false)
scroll.addEventListener("touchmove", function (ev) {
var oEvent = ev || event;
oEvent.preventDefault();
if (oEvent.targetTouches.length == 1) {
var touch = oEvent.touches[0];//获取手指触屏信息
var disEnd = touch.clientX;//手指触屏X
//当前物体的移动距离=手指触屏位置-手指触屏起始位置+物体的起始位置
var moveDis = disEnd - disStart + initLeft;
//滑动边界处理
if (Math.abs(moveDis) > clientAtt.width * 6) {
moveDis = -clientAtt.width * 6;
}
if (moveDis > 0) {
moveDis = 0;
}
this.style.left = moveDis + 'px';
}
}, false);
4、手指离开屏幕的特殊处理
var currIndex = 1;//第一个
scroll.addEventListener('touchend', function (ev) {
var absLeft = Math.abs(this.offsetLeft);
if (absLeft != Math.abs(initLeft)) {
if (absLeft > Math.abs(initLeft)) {
currIndex++;
}
else {
currIndex--;
}
}
currIndex = currIndex > 6 ? 6 : currIndex;
$(this).stop(true).animate({ "left": -currIndex * clientAtt.width + 'px' }, 300, function () {
//循环:首尾处理
/*
第5个元素 如果继续向左滑 出现第1个 滑动到第1个的时候 如何和第2个元素相接????
为了处理这个问题,当手指松开的时候 立即将当期物体的位置 改成 滑动到第1个元素时的距离
第1个元素 继续向右滑 同理处理
*/
if (currIndex == 6) {
$(this).css("left", -clientAtt.width + 'px');
currIndex = 1;
}
else if (currIndex == 0) {
$(this).css("left", -5 * clientAtt.width + 'px');
currIndex = 5;
}
});
});