html5移动设备浏览器触屏事件兼容处理
来源:互联网 发布:非农数据在哪里看 编辑:程序博客网 时间:2024/04/28 09:16
自打诺基亚被苹果干趴下,Google开源Android系统,智能设备数量以及种类以不可阻挡的势头发展,苹果封闭的生态系统,Android开源开放的生态导致,殊途同归地给了我等屌丝开发者相同苦逼的命运,兼容命题。跨平台适配是个痛苦的工作,这里只谈谈近期工作学习相关的部分,苹果设备和安卓设备浏览器对触屏事件的兼容问题。
$(‘#click-me’).on(‘click’,function(){
alert(‘click’);
})
这段代码在pc上浏览器畅通无阻,手机端,拿起华为手机,perfect,换上iPhone56plus,萎了,什么反应都木有,什么情况?是的,伟大的触摸事件兼容性命题被抛出来了。虽然没向苹果公司验证,经过大量测试,应该无误。苹果设备只支持input标签的原生click事件,其他的标签,click无效。那怎么办,当然能办,还有专业的触屏事件,touchstart,touchmove,touchend事件。不多说,上主要代码,
......$.fn.touch = function(type,selector,cb,cancelBubble){if(arguments.length == 2){ cb = selector;}else if(arguments.length == 3){ cancelBubble = cb; cb = selector;}selector = $(this).selector; $(document).on(touchEvent.touchstart,selector,function(event){ if(cancelBubble){ event.stopPropagation(); event.originalEvent.stopPropagation(); } if(event.originalEvent && event.originalEvent.targetTouches){ event = event.originalEvent.targetTouches[0]; } startX = event.clientX; touchStartTime = new Date().getTime(); var _$this = $(this); _$this.parents('.t-row').attr("touchstart",1); event.$this = _$this; });switch (type){ case touchEvent.click:
// (this).each(function(){(document).on(touchEvent.touchend,selector,function(event){
touchEndTime = new Date().getTime();
var _
var longTouchtimeout = ”;
if(cancelBubble){
event.stopPropagation();
event.originalEvent.stopPropagation();
}
if(event.originalEvent && event.originalEvent.changedTouches){
event = event.originalEvent.changedTouches[0];
}
endX = event.clientX;
if((touchEndTime - touchStartTime) < 500 && Math.abs(startX - endX) < 10){
event.this = _this;
cb(event);
}
});
break;
case touchEvent.swipeleft:
(document).on(touchEvent.touchmove,selector,function(event){
if(cancelBubble){
event.stopPropagation();
event.originalEvent.stopPropagation();
}
if(event.originalEvent && event.originalEvent.targetTouches){
event = event.originalEvent.targetTouches[0];
}
var $this = $(this);
if($this.attr(“touchstart”) != 1){
return;
}
endX = event.clientX;
event.$this = $(this);
if(startX - endX < 60){
return;
}
$this.attr(“touchstart”,0);
cb(event);
});(document).on(touchEvent.touchend,selector,function(event){
if(cancelBubble){
event.stopPropagation();
event.originalEvent.stopPropagation();
}
if(event.originalEvent && event.originalEvent.changedTouches){
event = event.originalEvent.changedTouches[0];
}
endX = event.clientX;
var
if(startX - endX < 60){
return;
}
cb(event);
});
break;
case touchEvent.swiperight:
(document).on(touchEvent.touchmove,selector,function(event){
if(cancelBubble){
event.stopPropagation();
event.originalEvent.stopPropagation();
}
if(event.originalEvent && event.originalEvent.targetTouches){
event = event.originalEvent.targetTouches[0];
}
var $this = $(this);
if($this.attr(“touchstart”) != 1){
return;
}
endX = event.clientX;
event.$this = $(this);
if(endX - startX < 30){
return;
}
$this.attr(“touchstart”,0);
cb(event);
});(document).on(touchEvent.touchend,selector,function(event){
if(cancelBubble){
event.stopPropagation();
event.originalEvent.stopPropagation();
}
if(event.originalEvent && event.originalEvent.changedTouches){
event = event.originalEvent.changedTouches[0];
}
endX = event.clientX;
event.
if(endX - startX < 30){
return;
}
cb(event);
});
break;
}
}
……
其中,touchEvent对象如下:
var touchEvent = {
touchstart:”touchstart”,
touchmove:”touchmove”,
touchend:”touchend”,
click:”click”,//touchstart -> touchend
swipeleft:”swipeleft”,
swiperight:”swiperight”,
/**
* 判断是否触摸设备,若非触摸设备,touch事件替换为鼠标事件
*/
init:function(){
if (isPC()) {
this.touchstart = “mousedown”;
this.touchmove = “mousemove”;
this.touchend = “mouseup”;
}
return this;
}
}
首先检测设备,若是pc端,直接使用鼠标事件,若是移动设备,则使用touch事件,这里实现了点击事件,左滑和右滑。这里采用了$div.touch('click',function(event){})
第三个参数为是否取消冒泡,默认为false。对于touch事件的事件处理以及事件对象,这里不重新解释,不明白可以查看我之前的博文,touchstart,touchmove,touchend触摸事件的小小实践心得。
使用中还有几个问题:左右滑动的时候,似乎没有触发touchend事件,且安卓不是十分友好,iPhone效果还是很流畅的。继续研究中。
以上就是本次的分享内容,水平可能有限,如有不妥,直接指出,只是轻点喷,哈哈,谢谢大家。
- html5移动设备浏览器触屏事件兼容处理
- 浏览器兼容的事件处理
- 跨浏览器兼容事件处理
- 移动设备浏览器HTML5兼容性列表
- HTML5触摸屏和移动设备事件
- js事件驱动机制 浏览器兼容处理
- JS处理键盘事件 兼容多浏览器
- js在浏览器兼容教程:事件处理
- 跨兼容浏览器的事件处理程序
- 跨浏览器事件兼容,巧妙处理方法
- html5之移动触屏事件
- echarts 浏览器宽度自适应变化、兼容移动设备----实战
- 移动设备的触屏事件表
- js中的移动设备的事件处理
- 移动设备、手机浏览器Javascript滑动事件代码
- 移动设备、手机浏览器Javascript滑动事件代码
- 移动设备、手机浏览器Javascript滑动事件代码
- 具有跨浏览器兼容的事件处理javascript脚本
- 堆和栈的区别
- 优化Linux下的内核TCP参数以提高系统性能
- java中URL和File的相互转化
- struts2.0配置及使用
- 231A Team
- html5移动设备浏览器触屏事件兼容处理
- 【Android 排错第二例】UnsupportedOperationException
- SparkSQL 使用jdbcRDD访问数据库
- VTK三维重建方法总结
- Reorder List
- XML的mybatis
- Dom4j中XPath相对路径的使用
- Jquery表单验证,免得自己写了
- 响应式开发总结