常用原生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 相关文章推荐
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
基于jquery的一个图片hover的插件
Apr 24 Javascript
探讨jQuery的ajax使用场景(c#)
Dec 03 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
jQuery 回调函数(callback)的使用和基础
Feb 26 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
Mar 25 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
ES6下子组件调用父组件的方法(推荐)
Feb 23 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
JavaScript实现轮播图特效
Apr 10 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
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
Python中for循环详解
2014/01/17 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
判断网页编码的方法python版
2016/08/12 Python
带你了解python装饰器
2017/06/15 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
python实现弹窗祝福效果
2019/04/07 Python
Django 反向生成url实例详解
2019/07/30 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
副厂长岗位职责
2014/02/02 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
给病人的慰问信
2015/03/23 职场文书
导游词之太原天龙山
2020/01/02 职场文书
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript