跨浏览器的事件处理程序

2024-06-20 02:48

本文主要是介绍跨浏览器的事件处理程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

定义EventUtil对象,用来处理浏览器间的差异。要保证处理事件的代码能在大多数浏览器下一致地运行,只需关注冒泡阶段

var EventUtil = {

  //首先会检测传入的元素中是否存在DOM2级方法。如果存在DOM2级方法,则使用该方法:传入事件类型、时间处理程序函数和第三个参数false(表示冒泡阶段)。如果存在的是IE的方法,则采取第二种方案。最后一种可能就是使用DOM0级方法。没有考虑IE中的作用域问题。

  addHandler: function(element, type, handler) {

    if(element.addEventListenter) {

      element.addEventListener(type, handler, false);

    } else if(element.attachEvent) {

      element.attachEvent('on' type , handler);

    } else {

      element['on' type] = handler;

    }

  },

  getEvent: function(event) {

    //返回对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;

    }

  },

  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;

    }

  },

  stopPropagetion: function(event) {

    //阻止事件流(事件冒泡)

    if(event.stopPropagetion) {

      event.stopPropagetion();

    } else {

      event.cancelBubble = true;

    }

  },

  getRelatedTarget: function(event) {

    //DOM通过event对象的relatedTarget属性提供了相关元素的信息。这个属性只对于mouseover和mouseout事件才包含值;对于其他事件,这个属性的值是null。

    if(event.relatedTarget) {

      return event.relatedTarget;

    } else if(event.toElement) {

      return event.toElement;

    } else if(event.formElement) {

      return event.formElement;

    } else {

      return null;

    }

  },

  getButton: function(event) {

    //通过检测'MouseEvents'这个特性,就可以确定event对象中存在的button属性中是否包含正确的值。如果测试失败,说明是IE,就必须对相应的值进行规范化。

    if(document.implementation.hasFeater('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;


      }

    }

  },

  getWheelDelta: function(event) {

    //getWheelDelta()方法首先检测了事件对象是否包含wheelDelta属性,如果是则通过浏览器监测代码确定正确的值。如果wheelDelta不存在,则假设相应的值保存在detail属性中。由于Firefox的值有所不同,因此首先要将这个值的符号反向,然后再乘以40,就可以保证与其他浏览器的值相同了。有了这个方法之后,就可以将相同的事件处理程序指定给mousewheel和DOMMouseScroll事件了。

    if(event.wheelDelta) {

      return (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta :event.wheelDelta);

    } else {

      return -event.detail * 40;

    }

  },

  getCharcode: function(event) {

    //首先检测charCode属性是否包含数值(在不支持这个属性的浏览器中,值为underfined),如果是,则返回该值。否则,就返回keyCode属性值。

    if(typeof event.charCode == 'number') {

      return event.charCode;

    } else {

      return event.keyCode;

    }

  }

}

这篇关于跨浏览器的事件处理程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076888

相关文章

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

微软正式推出 Spartan 斯巴达浏览器

作为用于替代 IE 浏览器的下一代继任者,微软的 Project Spartan 斯巴达浏览器可算是吊足了玩家们的胃口!如今,在最新的 Windows 10 Build 10049 版本起,它终于正式登场了。 斯巴达浏览器搭载了全新的渲染引擎、新的用户界面并集成了 Cortana 语音助手。功能上新增了稍后阅读列表、阅读视图、F12开发者工具、支持网页注释 (手写涂鸦),可以保存到 O

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli