原生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 ...
随机推荐
- mysql中的year(date)和date_format(date,format)的用法
执行:select SYSDATE() from dual; 返回:2017-10-24 13:48:06 执行:select DATE_FORMAT(SYSDATE(),'%Y.%m.%d') fr ...
- jmeter的运行原理和测试计划要素
jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...
- 实现自定义docker 镜像共享
我觉得docker最大的便利性体现在可以实现镜像共享,方便团队在同一环境下开发.当然docker的强大之处不止于此. 接下来我用一个例子来演示如何进行docker镜像共享,步骤如下(Ubuntu): ...
- python控制台输出带颜色文字的方法
目地:提高重要信息的可读性,方便用户阅读了. 书写格式如下: #格式: 设置颜色开始 :\033[显示方式;前景色;背景色m #说明: 前景色 背景色 颜色 --------------------- ...
- Precision和Recall
学习自: http://blog.csdn.net/wangran51/article/details/7579100
- SqlAlchemy的简单使用
1.SQLAlchemy SQLAlchemy是python的一个通用的ORM框架 1.1 创建数据表 from sqlalchemy.ext.declarative import declarati ...
- 洛谷P3324 [SDOI2015]星际战争
题目:洛谷P3324 [SDOI2015]星际战争 思路: 类似<导弹防御塔>,因为题目保证有解,花费时间小于最终答案时一定无法消灭所有敌人,只要花费时间大于等于最终答案都可以消灭所有敌人 ...
- javascript中字符的一些常规操作
1,获取第一个字符 var str = "hello word"; console.log(str[0]); // h 2,获取最后一个字符 var str = "hel ...
- form表单提交,后台怎么获取select的值?后台直接获取即可,和input方式一样。
form表单提交,后台怎么获取select的值? 后台直接获取即可,和后台获取input的值方式一样. form提交后,后台直接根据select的name获取即可,即getPara("XXX ...
- python 集合运算