常用原生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 API学Jquery之一 选择器
Apr 07 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
浅析JavaScript基本类型与引用类型
May 28 Javascript
javascript常用函数(1)
Nov 04 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
jQuery实现的文字hover颜色渐变效果实例
Feb 20 Javascript
jQuery plugin animsition使用小结
Sep 14 jQuery
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
JavaScript实现的超简单计算器功能示例
Dec 23 Javascript
详解原生JS动态添加和删除类
Mar 26 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 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
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python爬虫要用到的库总结
2020/07/28 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
经济管理专业求职信
2014/06/09 职场文书
学校献爱心活动总结
2014/07/08 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
公司地址变更通知
2015/04/25 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
MySQL创建定时任务
2022/01/22 MySQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL