该例子是实现模拟手机左右滑动切换图片。
实验环境:html文件,1.jpg,...,6.jpg在同一路径下即可。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<a href="https://www.baidu.com" class="b" id="13d">
<img src='1.jpg' style='height:480px;width:768px'/>
</a>
</body>
<script>
//@Description: 监听触摸的方向
var EventUtil = {
addHandler: function (element, type, handler) {
if (element.addEventListener)
element.addEventListener(type, handler, false);
else if (element.attachEvent) element.attachEvent("on" + type, handler);
else element["on" + type] = handler;
},
removeHandler: function (element, type, handler) {
if (element.removeEventListener)
element.removeEventListener(type, handler, false);
else if (element.detachEvent) element.detachEvent("on" + type, handler);
else element["on" + type] = handler;
},
/**
* @param target 要绑定监听的目标元素
* @param isPreventDefault 是否屏蔽掉触摸滑动的默认行为(例如页面的上下滚动,缩放等)
* @param upCallback 向上滑动的监听回调(若不关心,可以不传,或传false)
* @param rightCallback 向右滑动的监听回调(若不关心,可以不传,或传false)
* @param downCallback 向下滑动的监听回调(若不关心,可以不传,或传false)
* @param leftCallback 向左滑动的监听回调(若不关心,可以不传,或传false)*/
listenTouchDirection: function (target, isPreventDefault, upCallback, rightCallback, downCallback, leftCallback) {
this.addHandler(target, "touchstart", handleTouchEvent);
this.addHandler(target, "touchend", handleTouchEvent);
this.addHandler(target, "touchmove", handleTouchEvent);
var startX;
var startY;
function handleTouchEvent(event) {
switch (event.type) {
case "touchstart":
startX = event.touches[0].pageX;
startY = event.touches[0].pageY;
break;
case "touchend":
var spanX = event.changedTouches[0].pageX - startX;
var spanY = event.changedTouches[0].pageY - startY;
var img_list=['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg','6.jpg'];
function rightCallback(){
var myobj=$("#13d img"); //填写位置
// var index=img_list.indexOf(myobj[0].src); //绝对路径
var index=img_list.indexOf(myobj[0].getAttribute('src'));
index--;
// console.log("you",index);
if (index<0){index=0};
myobj.attr("src",img_list[index])
};
function leftCallback(){
var myobj=$("#13d img"); //填写位置
var index=img_list.indexOf(myobj[0].getAttribute('src'));
// console.log("zuo",index);
index++;
if (index==img_list.length){index=img_list.length-1};
myobj.attr("src",img_list[index])
};
if (Math.abs(spanX) > Math.abs(spanY)) { //认定为水平方向滑动
if (spanX > 30) { //向右
if (rightCallback) {
rightCallback()
// console.log("right");
}
} else if (spanX < -30) { //向左
if (leftCallback) {
leftCallback()
// console.log("left");
}
}
} else { //认定为垂直方向滑动
if (spanY > 30) { //向下
if (downCallback) {
downCallback();
// console.log("down");
}
} else if (spanY < -30) {//向上
if (upCallback) {
upCallback();
// console.log("up");
}
}
}
break;
case "touchmove": //阻止默认行为
if (isPreventDefault) event.preventDefault();
break;
}
}
}
};
//使用的时候很简单,只需要向下面这样调用即可
// 其中下面监听的是整个DOM
// up, right, down, left为四个回调函数,分别处理上下左右的滑动事件
EventUtil.listenTouchDirection($("#13d")[0], true, false,"rightCallback", false,"leftCallback");
</script>
</html>