常用原生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 相关文章推荐
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
JavaScript 快捷键设置实现代码
Mar 13 Javascript
Mootools 1.2教程 排序类和方法简介
Sep 15 Javascript
基于jquery的$.ajax async使用
Oct 19 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
May 25 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
Mar 22 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
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
php调用mysql存储过程实例分析
2014/12/29 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
简单实现PHP留言板功能
2016/12/21 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
vue实现搜索过滤效果
2019/05/28 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
python实现windows下文件备份脚本
2018/05/27 Python
python安装requests库的实例代码
2019/06/25 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
pyspark 随机森林的实现
2020/04/24 Python
英国在线泳装店:Simply Swim
2019/05/05 全球购物
this关键字的作用
2016/01/30 面试题
医院护士专业个人的求职信
2013/12/09 职场文书
自荐书模板
2013/12/15 职场文书
陈欧广告词
2014/03/14 职场文书
创先争优活动心得体会
2014/09/04 职场文书
摩登时代观后感
2015/06/03 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
优质护理心得体会
2016/01/22 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL