原生js添加鼠标事件的兼容性写法
兼容pc和移动端,还兼容了surface平板。
surface平板特别坑,既可以用鼠标也能用触摸屏,也就是说同时有touch事件和mouse事件。
- function addEvent(_target,eventType,fnHandler,useCapture){
- useCapture==undefined?useCapture=true:"";
- var touchable,isSurface,msPointerable;
- try{ msPointerable = window.navigator.msPointerEnabled?true:false; }catch(e){ msPointerable=false; }
- try{ touchable = ("ontouchstart" in document && !isPC()) ? true : false; }catch(e){ touchable=false; }
- try{ isSurface = ("ontouchstart" in document && isPC()) ? true : false }catch(e){ isSurface=false }
- var oEventType = null;
- if(msPointerable){
- switch(eventType){
- case "mousedown":
- eventType="MSPointerDown";
- break;
- case "mousemove":
- eventType="MSPointerMove";
- break;
- case "mouseup":
- eventType="MSPointerUp";
- break;
- case "mouseover":
- eventType="MSPointerOver";
- break;
- case "mouseout":
- eventType="MSPointerOut";
- break;
- }
- }else if(touchable){
- switch(eventType){
- case "mousedown":
- eventType="touchstart";
- break;
- case "mousemove":
- eventType="touchmove";
- break;
- case "mouseup":
- eventType="touchend";
- break;
- case "mouseover":
- eventType="";
- break;
- case "mouseout":
- eventType="";
- break;
- }
- }
- if(isSurface){
- switch(eventType){
- case "mousedown":
- oEventType="touchstart";
- break;
- case "mousemove":
- oEventType="touchmove";
- break;
- case "mouseup":
- oEventType="touchend";
- break;
- case "mouseover":
- oEventType="";
- break;
- case "mouseout":
- oEventType="";
- break;
- }
- }
- if(eventType==""){
- return;
- }
- if (_target.addEventListener) {
- _target.addEventListener(eventType, fnHandler,useCapture);
- } else if (_target.attachEvent) {
- _target.attachEvent("on" + eventType, fnHandler);
- } else {
- _target["on" + eventType] = fnHandler;
- }
- if(!!oEventType){
- if (_target.addEventListener) {
- _target.addEventListener(oEventType, fnHandler,useCapture);
- } else if (_target.attachEvent) {
- _target.attachEvent("on" + oEventType, fnHandler);
- } else {
- _target["on" + oEventType] = fnHandler;
- }
- }
- }
- function removeEvent(_target, eventType, fnHandler,useCapture){
- useCapture==undefined?useCapture=true:"";
- var touchable,isSurface,msPointerable;
- try{ msPointerable = window.navigator.msPointerEnabled?true:false; }catch(e){ msPointerable=false; }
- try{ touchable = ("ontouchstart" in document && !isPC()) ? true : false; }catch(e){ touchable=false; }
- try{ isSurface = ("ontouchstart" in document && isPC()) ? true : false }catch(e){ isSurface=false }
- var oEventType = null;
- if(msPointerable){
- switch(eventType){
- case "mousedown":
- eventType="MSPointerDown";
- break;
- case "mousemove":
- eventType="MSPointerMove";
- break;
- case "mouseup":
- eventType="MSPointerUp";
- break;
- case "mouseover":
- eventType="MSPointerOver";
- break;
- case "mouseout":
- eventType="MSPointerOut";
- break;
- }
- }else if(touchable){
- switch(eventType){
- case "mousedown":
- eventType="touchstart";
- break;
- case "mousemove":
- eventType="touchmove";
- break;
- case "mouseup":
- eventType="touchend";
- break;
- case "mouseover":
- eventType="";
- break;
- case "mouseout":
- eventType="";
- break;
- }
- }
- if(isSurface){
- switch(eventType){
- case "mousedown":
- oEventType="touchstart";
- break;
- case "mousemove":
- oEventType="touchmove";
- break;
- case "mouseup":
- oEventType="touchend";
- break;
- case "mouseover":
- oEventType="";
- break;
- case "mouseout":
- oEventType="";
- break;
- }
- }
- if (_target.removeEventListener) {
- _target.removeEventListener(eventType, fnHandler,useCapture);
- } else if (_target.detachEvent) {
- _target.detachEvent("on" + eventType, fnHandler);
- } else {
- _target["on" + eventType] = null;
- }
- if(!!oEventType){
- if (_target.removeEventListener) {
- _target.removeEventListener(oEventType, fnHandler,useCapture);
- } else if (_target.detachEvent) {
- _target.detachEvent("on" + oEventType, fnHandler);
- } else {
- _target["on" + oEventType] = null;
- }
- }
- }
- function isPC() {
- var userAgentInfo = navigator.userAgent;
- var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];
- var flag = true;
- for (var v = 0; v < Agents.length; v++) {
- if (userAgentInfo.indexOf(Agents[v]) > 0) {
- flag = false;
- break;
- }
- }
- return flag;
- }
原生js添加鼠标事件的兼容性写法的更多相关文章
- 原生js获取鼠标坐标方法全面讲解-zmq
原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y 一.关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种:eve ...
- 原生js添加和删除类
原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...
- 原生js添加博客点击鼠标出小心心效果~~
昨天刚申请成功JS权限,心血来潮想添加点东西,记得之前看到别人家博客首页点击鼠标的时候会出现炫酷的 “小心心”,自己也来搞一个.没有用jquery啥的框架,原生js写起来麻烦了点,不过主要是怕博客首页 ...
- 原生js自动触发事件
熟悉jquery的童鞋都知道在jq中有一个方法可以自动触发事件,那就是trigger(),那么通过原生js又怎么模拟触发呢? js中添加一个主动触发事件的方法有dispatch.该方法能模拟用户行为, ...
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y【转】
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
- 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
基于css3新属性transform,实现3d立方体的旋转 通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示 实现原理:通过获取鼠 ...
- 原生JS添加节点方法与jQuery添加节点方法的比较及总结
一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div1</div> <div id="d ...
- 61.H5---利用canvas+原生js进行鼠标跟随绘图
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
随机推荐
- iOS 微信支付如果遇到跳转只有一个确定请看这里
http://www.cocoachina.com/bbs/read.php?tid-321546.html 今天在联调微信支付,不得不说,和它比起来,阿里的支付sdk真的是太好用了.果然和后端同学在 ...
- Leetcode744.Find Smallest Letter Greater Than Target寻找比目标字母大的最小字母
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 数组里字母的顺序是循环的.举个例子,如果目标字母target = 'z' 并且有 ...
- Oracle使用——Oracle表字段的增加、删除、修改和重命名
增加字段 语法 alter table tablename add (column datatype [default value][null/not null]); 说明:alter table 表 ...
- java中URLEncode和URLDecode
URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded MIME字符串之间的相互转化 如果传递的字符串中包含非西欧字符的字符串, ...
- JavaScript中操作数组的方法
JavaScript Array 对象 对数组操作的方法分为两种 一种是会改变原始数组的变异方法,还有一种是不会改变原始数组的非变异方法. 总结 巧记 Push() 尾部添加 pop() 尾部删除 U ...
- TIJ——Chapter Twelve:Error Handling with Exception
Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...
- Android 高仿微信支付键盘
现在很多app的支付.输入密码功能,都已经开始使用自定义数字键盘,不仅更加方便.其效果着实精致. 下面带着大家学习下,如何高仿微信的数字键盘,可以拿来直接用在自身的项目中. 先看下效果图: 1. 自定 ...
- oralce GROUPING
/*从上面的结果中我们很容易发现,每个统计数据所对应的行都会出现null, 如何来区分到底是根据那个字段做的汇总呢,grouping函数判断是否合计列!*/ select decode(groupin ...
- Java练习 SDUT-1704_统计数字问题
统计数字问题 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码 ...
- jQuery 滑动
jQuery 滑动方法 通过 jQuery,您可以在元素上创建滑动效果. jQuery 拥有以下滑动方法: slideDown() slideUp() slideToggle() jQuery sli ...