常用原生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 相关文章推荐
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
jquery checkbox的相关操作总结
Oct 17 Javascript
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
代码详解javascript模块加载器
Mar 04 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
JS使用new操作符创建对象的方法分析
May 30 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 Javascript
JavaScript前端面试组合函数
Jun 21 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
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python中unittest用法实例
2014/09/25 Python
django实现分页的方法
2015/05/26 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
Python LMDB库的使用示例
2021/02/14 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
劲霸男装广告词
2014/03/21 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
工作建议书范文
2014/05/13 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
先进班组事迹材料
2014/12/25 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
浅谈Python数学建模之线性规划
2021/06/23 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript