js 实现一些跨浏览器的事件方法详解及实例


Posted in Javascript onOctober 27, 2016

js实现一些跨浏览器的事件方法

用JavaScript实现事件的绑定,移除,以及一些常用的事件属性的获取,时常要考虑到在不同浏览器下的兼容性,下面给出了一个跨浏览器的事件对象:

var EventUtil = {
  on: function(element, type, handler) {/* 添加事件 */
    if (element.addEventListener) {
      element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {//IE 注意:此时事件处理程序会在全局作用域中运行,因此用attachEvent绑定的事件,此时在事件处理函数里的this 等于window,使用时要注意
      element.attachEvent("on" + type, handler);
    } else {
      element["on" + type] = handler;
    }
  },

  off: 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) {/* 返回对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 和mouserout 这两个事件都会涉及把鼠标指针从一个元素的边界之内移动到另一个元素的边界之内。*/
  getRelatedTarget: function(event) {
    if (event.relatedTarget) {
      return event.relatedTarget;
    } else if (event.toElement) {//IE8 mouserout事件
      return event.toElement;
    } else if (event.fromElement) {//IE8 mouseover事件
      return event.fromElement;
    } else {
      return null;//其他事件
    }
  }
};

调用如下:

EventUtil.on(document, "click", function(event){//为document元素绑定click事件
  event = EventUtil.getEvent(event);//获取event事件对象
  alert("Screen coordinates: " + event.screenX + "," + event.screenY);
});

文章参考自《JavaScript高级程序设计第三版》

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js setTimeout 常见问题小结
Aug 13 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
Sep 29 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
利用Node.js编写跨平台的spawn语句详解
Feb 12 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
Aug 17 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
微信小程序3D轮播实现代码
Sep 19 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 #Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
Oct 27 #Javascript
简单理解vue中el、template、replace元素
Oct 27 #Javascript
深入理解JavaScript定时机制
Oct 27 #Javascript
解析javascript图片懒加载与预加载的分析总结
Oct 27 #Javascript
js实现加载更多功能实例
Oct 27 #Javascript
Vue.js一个文件对应一个组件实践
Oct 27 #Javascript
You might like
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
js select常用操作控制代码
2010/03/16 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
python 中字典嵌套列表的方法
2018/07/03 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python os模块简单应用示例
2019/05/23 Python
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
博士生求职信
2014/07/06 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
总结一些Java常用的加密算法
2021/06/11 Java/Android
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫