本文介绍一种通过 JavaScript 检测用户设备类型,自动切换触摸(touch)与鼠标(mouse)事件的通用方法。代码涵盖 UA 解析逻辑、事件绑定策略及阻止默认行为处理,帮助开发者实现一套代码兼容手机与 PC 端的交互逻辑。
设备检测与事件切换逻辑
本文介绍一种通过 JavaScript 检测用户设备类型,从而在不同终端上执行相应交互逻辑的实现方法。该方案旨在提升代码兼容性,供开发者参考使用。
首先需要实现设备检测逻辑,以区分当前访问者是移动设备还是桌面电脑。
function isMobile(){
var sUserAgent= navigator.userAgent.toLowerCase(),
bIsIpad= sUserAgent.match(/ipad/i) == "ipad",
bIsIphoneOs= sUserAgent.match(/iphone os/i) == "iphone os",
bIsMidp= sUserAgent.match(/midp/i) == "midp",
bIsUc7= sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4",
bIsUc= sUserAgent.match(/ucweb/i) == "ucweb",
bIsAndroid= sUserAgent.match(/android/i) == "android",
bIsCE= sUserAgent.match(/windows ce/i) == "windows ce",
bIsWM= sUserAgent.match(/windows mobile/i) == "windows mobile",
bIsWebview = sUserAgent.match(/webview/i) == "webview";
return (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM);
}
基于设备检测结果,动态定义应绑定的具体事件类型,实现触摸与鼠标事件的自动切换。
var touchStart,touchMove,touchEnd;
touchStart = isMobile() ? 'touchstart' : 'mousedown';
touchMove = isMobile() ? 'touchmove' : 'mousemove';
touchEnd = isMobile() ? 'touchend' : 'mouseup';
触摸与鼠标事件的具体处理
详细展示三种核心交互事件(开始、移动、结束)的具体处理逻辑,包括坐标获取与滑动距离判断。
touchstart:function(e){
var e=e || window.event; //要判断使用哪种event
stopDefault(e); //不同的浏览器,阻止浏览器默认事件方法不同
if(isMobile()){ //如果是手机
var touch=e.touches[0];
this.y1=touch.pageY
}else{
this.y1=e.pageY; //如果不是手机
}
this.y2=0;
},
touchmove:function(e){
var e=e || window.event;
stopDefault(e);
if(isMobile()){
var touch=e.touches[0];
this.y2=touch.pageY;
}else{
this.y2=e.pageY;
}
},
touchend:function(e){
var e=e || window.event;
stopDefault(e);
if(this.y2==0){
return;
}
var diffY=this.y2-this.y1;
if(diffY>50){
this.doNext();
}else if(diffY<-50){
this.doPrev();
}
this.y1=0,
this.y2=0;
},
阻止浏览器默认行为的方法
提供跨浏览器兼容的默认事件阻止方法,确保在阻止页面滚动等默认行为时能正常工作。
function stopDefault(e){
var e=e || window.event;
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue=false;
}
}
希望上述关于 JavaScript 程序设计的内容能为您的项目开发提供有益参考。