Javascript之浏览器兼容EventUtil
var EventUtil = {
//添加事件处理程序
addHandler: function (element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
//DOM2中定义的事件处理程序,IE9,Firefox,Safari,Chrome和Opera支持此方法。
} else if (element.attachEvent) {
element.attachEvent("on" + type, handler);
//在IE中attachEvent()方法是在全局作用域中运行的,也就是this等于window。而且如果给一个事件添加了多个处理程序,其执行顺序是逆序的。
} else {
element["on" + type] = handler;
//DOM0级方法,其只对每个事件只支持一个事件处理程序。
}
},
//移除事件处理程序
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;
//DOM0级方法
}
},
//获取事件对象
getEvent: function (event) {
return event ? event : window.event;
//在兼容DOM的浏览器中,event是简单的传入和返回;在IE中,event是未定义的(undefined),而是一个window对象属性。
},
//获取事件目标
getTarget: function (event) {
return event.target || event.srcElement;
//IE中的事件目标属性是srcElement。
},
//取消事件的默认行为
//只有在cancelable属性为true时,才可以取消事件的默认行为。
preventDefault: function (event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
//IE中的事件对象有returnValue属性,默认为true,设置为false可以取消默认行为。
}
},
//取消事件的捕获或者冒泡
stopPropagation: function (event) {
if (event.stopPropagation) {
event.stopPropagation();
//可以用来取消事件捕获和冒泡。
} else {
event.cancelBubbles = true;
//兼容IE,只可以取消事件冒泡。
}
},
//获取相关元素,只对于mouseover,mouseout才包含值,对于其他事件是null。
getRelatedTarget: function (event) {
if (event.relatedTarger) {
return event.relatedTarget;
//DOM通过relatedTarget属性保存相关元素。
} else if (event.toElement) { //兼容IE,mouseout触发。
return event.toElement;
} else if (event.fromElement) { //兼容IE,mouseover事件触发。
return event.fromElement;
} else { return null; }
},
//获取鼠标点击按钮
getMouseButton:function(evsent){
if (document.implementation.hasFeature("MouseEvents","2.0")){
return event.button; //0-鼠标主按键/左键;1-鼠标中间按键/滚轮;2-鼠标次按键/右键。
} else{
switch(event.button){
case 0:
case 1:
case 5:
case 7:
return 0;
case 2:
case 6:
return 2;
case 4:
return 1;
}
}
},
//鼠标滚轮事件,获取wheelData。
getWheelData:function(event){ //向前滚动是,wheelData是120的倍数,向后滚动是-120的倍数。
if(event.wheelData){
return (client.engine.opera && client.engine.opera<9.5 ? -event.wheelData : event.wheelData);
//在opera9.5前的版本中,wheelData的正负号是颠倒的。
}
else{ return -event.detail*40;} //兼容Firefox,其鼠标滚轮信息保存在detail中,而且是向前是-3的倍数,向后是3的倍数。
},
//取得按键的字符编码
getCharCode: function(event){
if (typeof event.charCode == "number"){
return event.charCode; //IE9,Firefox,Safari,Chrome的event对象有一个charCode属性,只有发生keypress事件时才包含值。
} else {
return event.keyCode; //IE8及之前的版本和Opera在keyCode中保存字符编码。
}
}
//操作剪切板
//取得剪切板数据
getClipboardText: function(event){
var clipboardData = (event.clipboardData || window.cilpboardData);//在IE中是window对象的属性。
return clipboardData.getData("text"); //在IE中有两种数据格式text和url;其他浏览器是MIME类型,但可以用text代表text/plain。
}
//设置剪切板数据
setClipboardText: funtion(evnet,value){
if (event.clipboardData){
return event.clipboardData.setData("text/plain", value); //与以上不同的是setData方法不能识别text。
} else if (window.clipboardData){
return window.clipboardData.setData("text", value); //兼容IE
}
}
}
持续更新中……
Javascript之浏览器兼容EventUtil的更多相关文章
- JavaScript中浏览器兼容问题
浏览器兼容性问题是在实际开发中容易忽略而又最重要的一部分.我们在讲老版本浏览器兼容问题之前,首先要了解什么是能力检测,它是来检测浏览器有没有这种能力,即判断当前浏览器是否支持要调用的属性或者方法.下面 ...
- Javascript常见浏览器兼容问题
常见浏览器原生javascript兼容性问题主要分为以下几类: 一.Dom 1.获取HTML元素,兼容所有浏览器方法:document.getElementById("id")以I ...
- Javascript 字符串浏览器兼容问题
先看下不兼容的写法,若我想获取某个字符串的第几位 var str='aavvvcc'; console.info(str[0]); 这种写法 在IE 7以下的浏览器都不兼容,以下提供浏览器全兼容的方式 ...
- JavaScript之浏览器兼容问题与IE(神经病一样的浏览器)
IE是最讨厌的浏览器,没有之一.----题记 废话不说,粘上大图~
- javascript与浏览器学习(一)
待学习………… 20160421 标题:JavaScript中浏览器兼容问题 博客地址:http://www.cnblogs.com/DF-fzh/p/5408241.html 简单 ...
- Javascript不同浏览器差异及兼容方法
原文链接:http://caibaojian.com/js-ie-different-from-firefox.html javascript的各种兼容就是为了解决不同浏览器的差异性,了解其中的差异能 ...
- 多浏览器兼容用javascript获取url参数的方法比较推荐的一种
多浏览器兼容用javascript获取url参数的方法比较推荐的一种 <script language = javascript> function request(paras){ var ...
- JavaScript初学者建议:不要去管浏览器兼容
如果可以回到过去的话,我会告诉自己这句话:"初学JavaScript的时候无视DOM和BOM的兼容性" 我初学时的处境 在我初学JavaScript的时候最头痛的就是浏览器兼容问题 ...
- 在javascript中的浏览器兼容问题以及兼容浏览器汇总(默认事件,阻止冒泡,事件监听。。。)以及解决方式详解
在javascript中常见的浏览器兼容问题,以及解决方式. 在前端工作当中我们遵循这样的原则:渐进增强和优雅降级 渐进增强(progressive enhancement): 针对低版本浏览器进 ...
随机推荐
- POI操作word和html相互转化
下面是里两个类:第一个类是html转为word,第二个是word转html(最下面附上jar包下载链接) package com.wz.poi.wordHtml; /** * 2018/4/24 * ...
- P2306 被yyh虐的mzc
P2306 被yyh虐的mzc 容量为 \(V\), 有 \(n\) 件物品, 反正直接背包绝对超时 , 每个有重量和价值 \(a_{i}, b_{i}(a_{i}, b_{i} <= 10)\ ...
- 我的编码习惯 - Controller规范
原文出处: 晓风轻 请先阅读我这2篇文章 程序员你为什么这么累? 和 我的编码习惯 - 接口定义. 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...
- java 锁的分类
java中为了解决多线程并发带来的线程安全问题,引入了锁机制. 一.公平锁和非公平锁 1.公平锁:按照申请锁的顺序(FIFO队列)来获取锁. 2.非公平锁:所有线程都会竞争,获取的锁的顺序和申请顺序无 ...
- python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化)
优点:使用gevent协程,可以更好的利用线程资源.(基于线程实现) 需求:使用一个线程,去请求多个网站的资源(注意,请求上会有延时)<实际上是去请求了大量的网站信息,我们使用了多线程,只不过每 ...
- 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
过年期间一直在啃一本书,学习计算机组成原理. 这是一本很棒的书,是一个基于项目的学习过程.可以让人理解的很深刻. coursera上有这本书前半部分的教程,是由书的作者团队们开的课,个人认为很棒,可惜 ...
- 遇到can not resolve app 依赖包的问题
1.第一种解决方式:build->sdkmannger->sdk tool ->安装android support responsitory和google responsitory ...
- Understanding the Bias-Variance Tradeoff
Understanding the Bias-Variance Tradeoff When we discuss prediction models, prediction errors can be ...
- Seven Techniques for Data Dimensionality Reduction
Seven Techniques for Data Dimensionality Reduction Seven Techniques for Data Dimensionality Reductio ...
- MapReduce (MRV1)设计理念与基本架构
MapReduce 是一个分布式计算框架,主要由两部分组成:编程模型和运行时环境. 其中,编程模型为用户提供了非常易用的编程接口,用户只需要像编写串行程序一样实现几个简单的函数即可实现一个分布式程序, ...