浏览文章

文章信息

移动端js触摸touch阻止浏览器默认切换选项卡行为,js移动端判断上下左右滑动,原因,示例,及其解释 946

在 window、document 和 body 上注册的相关touch事件浏览器默认passive: true(冒泡阶段执行)。

也就是会忽略e.preventDefault(),导致在触摸过程中无法通过代码阻止浏览器的默认事件行为

(左右滑动直接触发手机浏览器默认功能--切换选项卡)

解决方法:

​window.addEventListener('touchstart',touchs,{ passive: false });

window.addEventListener('touchmove',touchs,{ passive: false });

window.addEventListener('touchend',touchs,{ passive: false });

示例:

function touchs(e){
let target = $(e.target)
//阻止浏览器默认滚动事件
//获取DOM标签
//通过if语句判断event.type执行了哪个触摸事件
if (target.hasClass('mfp-img')) {
e.preventDefault();
if(e.type==="touchstart"){
//获取开始的位置数组的第一个触摸位置
var touch = e.touches[0];
//获取第一个坐标的X轴
startx = Math.floor(touch.pageX);
//获取第一个坐标的X轴
starty = Math.floor(touch.pageY);
//触摸中的坐标获取
}else if(e.type==="touchmove"){
var touch = e.touches[0];
movex = Math.floor(touch.pageX);
movey = Math.floor(touch.pageY);
//当手指离开屏幕或系统取消触摸事件的时候
}else if(e.type === "touchend" || e.type === "touchcancel"){
//获取最后的坐标位置
endx = Math.floor(e.changedTouches[0].pageX);
endy = Math.floor(e.changedTouches[0].pageY);
//获取开始位置和离开位置的距离
nx = endx-startx;
ny = endy-starty;
//通过坐标计算角度公式 Math.atan2(y,x)*180/Math.PI
angle = Math.atan2(ny, nx) * 180 / Math.PI;
// if(Math.abs(nx)<=1 ||Math.abs(ny)<=1){
// console.log('滑动距离太小');
// return false;
// }
// //通过滑动的角度判断触摸的方向
if(angle >= -45 && angle < 45){
// console.log('右滑动');
$('button.mfp-arrow-left').click()
return false;
}else if(angle >= -135 && angle < -45){
// console.log('下滑动');
return false;
}else if(/*(angle<=180 && angle>=135) || (angle>=-180 && angle<-135 )*/(angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)){
// console.log('左滑动');
$('button.mfp-arrow-right').click()
return false;
}else if(angle >= 45 && angle < 135){
// console.log('上滑动');
return false;
}
}
}
}
// var body = document.getElementsByTagName("body")[0];
window.addEventListener('touchstart',touchs,{ passive: false });
window.addEventListener('touchmove',touchs,{ passive: false });
window.addEventListener('touchend',touchs,{ passive: false });
复制修改即可使用。


原创