兼容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;
}

  

转载于:https://www.cnblogs.com/wblx/p/10918823.html

原生js添加鼠标事件的兼容性写法相关推荐

  1. vuejs 原生JS 拖拽事件案例

    原生JS or Vue 事件案例合集(详细) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 Section 1 单个或多个鼠标拖拽事件的理解 提示:写完文章后,目录可以自动生成,如 ...

  2. java 中鼠标事件_[Java教程]js中鼠标事件总结

    [Java教程]js中鼠标事件总结 0 2017-07-11 00:00:19 js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblc ...

  3. 原生js添加动画效果

    原生js添加动画效果 html 这个图片是使用阿里图标需要下载 <div class="content"><div class="contAnimati ...

  4. 百度地图 只显示某个省 自定义标注点 添加鼠标事件

    小白初试,这里用广西省为例,但是感觉百度地图加载属实有点慢=.= 以下是完整代码 <!DOCTYPE html> <html lang="en"> < ...

  5. jQuery学习(四)— jQuery的ready事件和原生JS的load事件的区别

    jQuery学习(四)- jQuery的ready事件和原生JS的load事件的区别 jQuery的ready事件和原生JS的load事件的区别: 页面中可以有多个ready事件,而load事件会出现 ...

  6. 原生JS javascript解除绑定事件 JS删除绑定事件

    原生JS javascript解除绑定事件 JS删除绑定事件 一.直接删除法 1.适用于直接绑定的事件,如: <h1 id="h1" onclick="_click ...

  7. 原生JS实现鼠标按下拖拽效果

    原生JS实现鼠标按下拖拽效果 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...

  8. 原生JS添加节点的方法

    一 . 原理 insertAdjacentHTML() 原生js添加节点 二.代码 <!DOCTYPE html> <html><head><meta cha ...

  9. 原生js添加节点(字符串形式)

    原生js添加节点(字符串形式) MDN地址查看方法描述 element.insertAdjacentHTML(position, text); element:要追加的元素 position:追加在目 ...

  10. 在原生js中的事件监听方法

    一.传统事件绑定方法 我们在学习的时候,最初接触的事件绑定方式大多是传统事件绑定方法.传统事件绑定方法事例如下: window.οnlοad=function(){alert("页面已加载& ...

最新文章

  1. 网易游戏2019暑期实习开发岗笔试题
  2. 使用C#和Excel进行报表开发(五)-操作单元格边框和颜色 【转】
  3. Axure高保真学校后台管理作品管理教师管理资源审核学生管理家长管理权限管理资源管理web端后台模板管理教师审核统计分析教育后台管理系统学校后台管理系统校园后台管理系统
  4. 并行算法:如何利用并行处理提高算法的执行效率?
  5. ubuntu 安装 mysql debug_ubuntu 安装phpstorm+xdebug 动态调试环境
  6. Qt warning : 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
  7. 数论中的偶数阶Abel群的阶
  8. 磁力计简单水平较准算法
  9. IBM服务器引导盘serverguide 下载
  10. 黑白表格样式教师求职简历免费word模板
  11. excel检验是否是正态分布-T分布
  12. 小说APP源码—小说app开发如何做到小说APP系统快速搭建?
  13. EventListenerTouchOneByOne::create() 单点触摸
  14. 一周热图|倪妮现身1664法蓝晚宴;贾静雯代言艾美特;刘嘉玲助力苏州国际设计周...
  15. VTK笔记-图形相关-圆锥体-vtkConeSoure类
  16. VFS中的read/write系统调用
  17. java解非线性方程组_非线性方程与方程组的数值解法
  18. 免费好用的oa系统有哪些?盘点这几款!
  19. 广州市花都区2021-2022学年九年级第一学期期末考试英语试题
  20. 友盟推送 java_java 后台调用友盟推送 如何设置ios 的 title?

热门文章

  1. 2021-07-31mysql 登录退出
  2. java窗口淡出_java淡入淡出式显示gui
  3. python中pycharm倒计时_pycharm中的快捷键和简单设置
  4. Kubernetes 小白学习笔记(18)--集群存储-volume、PV、PVC
  5. android intent json,如何从android中的Intent服务中的服务器获取Json响应?
  6. 数据结构和算法——八种常用的排序算法----直接插入排序和希尔排序
  7. 基于SSM的房屋租赁系统
  8. hwd分别是长宽高_丰田重磅新RAV4荣放!不仅颜值高了 配置还再升级,仅18万
  9. mysql block是什么,php – MySQL PDO – try {block}里面应该是什么?
  10. javaIO流-File类及其方法