常用原生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 相关文章推荐
jQuery的一些特性和用法整理小结
Jan 13 Javascript
jquery下为Event handler传递动态参数的代码
Jan 06 Javascript
计算世界完全对称日的js代码,粗糙版
Nov 04 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
jquery遍历标签中自定义的属性方法
Sep 17 Javascript
JavaScript实现倒计时跳转页面功能【实用】
Dec 13 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
JS实现网页时钟特效
Mar 25 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
vue监听滚动事件的方法
Dec 21 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
缅甸的咖啡简史
2021/03/04 咖啡文化
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
Django web框架使用url path name详解
2019/04/29 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python Subprocess模块原理及实例
2019/08/26 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
大学毕业感言一句话
2014/02/06 职场文书
三万活动总结
2014/04/28 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年新教师工作总结
2014/11/08 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
中秋晚会致辞
2015/07/31 职场文书