常用原生JS兼容性写法汇总


Posted in Javascript onApril 27, 2016

就来总结一下简单的东西

备注:一下的方法都是包裹在一个EventUtil对象里面的,直接采用对象字面量定义方法了。。。

①添加事件方法

addHandler:function(element,type,handler){
 if(element.addEventListener){//检测是否为DOM2级方法
  element.addEventListener(type, handler, false);
 }else if (element.attachEvent){//检测是否为IE级方法
  element.attachEvent("on" + type, handler);
 } else {//检测是否为DOM0级方法
  element["on" + type] = handler;
 }
}

②移除之前添加的事件方法

removeHandler:function(element, type, handler){
  if (element.removeEventListener){
   element.removeEventListener(type, handler, false);
  } else if (element.detachEvent){
   element.detachEvent("on" + type, handler);
  } else {
   element["on" + type] = null;
  }
 }

③获取事件及事件对象目标

//获取事件对象的兼容性写法
 getEvent: function(event){
  return event ? event : window.event;
 },
 //获取事件对象目标的兼容性写法
 getTarget: function(event){
  return event.target || event.srcElement;
 }

④阻止浏览器默认事件的兼容性写法

preventDefault: function(event){
  if (event.preventDefault){
   event.preventDefault();
  } else {
   event.returnValue = false;
  }
 }

⑤阻止事件冒泡的兼容性写法

stopPropagation: function(event){
  if (event.stopPropagation){
   event.stopPropagation();
  } else {
   event.cancelBubble = true;
  }
 }

⑥mouseover和mouseout 事件才包含的获取相关元素的方法

//mouseover和mouseout 事件才包含的获取相关元素的方法
getRelatedTarget: function(event){
 if (event.relatedTarget){
  return event.relatedTarget;
 } else if (event.toElement){
  return event.toElement;
 } else if (event.fromElement){
  return event.fromElement;
 } else {
  return null;
 }
}

⑦鼠标滚轮判断

对于mousedown 和mouseup 事件来说,则在其event 对象存在一个button 属性,
表示按下或释放的按钮。DOM的button 属性可能有如下3 个值:0 表示主鼠标按钮,1 表示中间的鼠
标按钮(鼠标滚轮按钮),2 表示次鼠标按钮。在常规的设置中,主鼠标按钮就是鼠标左键,而次鼠标
按钮就是鼠标右键。
IE8 及之前版本也提供了button 属性,但这个属性的值与DOM 的button 属性有很大差异。
 0:表示没有按下按钮。
 1:表示按下了主鼠标按钮。
 2:表示按下了次鼠标按钮。
 3:表示同时按下了主、次鼠标按钮。
 4:表示按下了中间的鼠标按钮。
 5:表示同时按下了主鼠标按钮和中间的鼠标按钮。
 6:表示同时按下了次鼠标按钮和中间的鼠标按钮。
 7:表示同时按下了三个鼠标按钮。

getButton: function(event){
 if (document.implementation.hasFeature("MouseEvents", "2.0")){
  return event.button;
 } else {
  switch(event.button){
   case 0:
   case 1:
   case 3:
   case 5:
   case 7:
   return 0;
   case 2:
   case 6:
   return 2;
   case 4:
   return 1;
  }
 }
}

⑧能够取得鼠标滚轮增量值(delta)的方法

getWheelDelta: function(event){
 if (event.wheelDelta){
  return (client.engine.opera && client.engine.opera < 9.5 ?
   -event.wheelDelta : event.wheelDelta);
 } else {
  return -event.detail * 40;//firefox中的值为+3表示向上滚,-3表示向下滚
 }
}

⑨跨浏览器的方式取得字符编码

getCharCode: function(event){
 if (typeof event.charCode == "number"){
  return event.charCode;
 } else {
  return event.keyCode;
 }
}

⑩访问剪贴板中的数据

getClipboardText: function(event){
  var clipboardData = (event.clipboardData || window.clipboardData);
  return clipboardData.getData("text");
 }

11.设置剪贴板中的数据

setClipboardText: function(event, value){
  if (event.clipboardData){
   return event.clipboardData.setData("text/plain", value);
  } else if (window.clipboardData){
   return window.clipboardData.setData("text", value);
  }
 }

封装一下,然后就可以直接用了。

完整文件及更多CSS、LESS基础重置样式见:https://github.com/LuckyWinty/resetFile

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
setInterval 和 setTimeout会产生内存溢出
Feb 15 Javascript
js最简单的拖拽效果实现代码
Sep 24 Javascript
jQuery.ajax 用户登录验证代码
Oct 29 Javascript
jQuery最佳实践完整篇
Aug 20 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
Aug 15 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
Nov 10 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
JS组件Bootstrap实现弹出框效果代码
Apr 26 #Javascript
跨域资源共享 CORS 详解
Apr 26 #Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 #Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 #Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 #Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 #Javascript
深入理解JS中的substr和substring
Apr 26 #Javascript
You might like
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
python 布尔操作实现代码
2013/03/23 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
python next()和iter()函数原理解析
2020/02/07 Python
Python tcp传输代码实例解析
2020/03/18 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python 存取npy格式数据实例
2020/07/01 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
中医学专业自荐信范文
2014/04/01 职场文书
志愿者活动总结报告
2014/06/27 职场文书
关于保护环境的建议书
2014/08/26 职场文书
故意伤害辩护词
2015/05/21 职场文书
导游词之凤凰古城
2019/10/22 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang