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 相关文章推荐
FormValidate 表单验证功能代码更新并提供下载
Aug 23 Javascript
JS随机漂浮广告代码具体实例
Nov 19 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
Angular4学习笔记之新建项目的方法
Jul 18 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
Mar 13 Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 Javascript
Javascript var变量删除原理及实现
Aug 26 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 array_flip() 删除数组重复元素
2009/01/14 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
webpack多页面开发实践
2017/12/18 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Python科学计算环境推荐——Anaconda
2014/06/30 Python
python中pass语句用法实例分析
2015/04/30 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
元旦晚会主持词
2014/03/24 职场文书
倡议书格式模板
2014/05/13 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
高考标语大全
2014/06/05 职场文书
学校师德师风整改方案
2014/10/28 职场文书
影视后期实训报告
2014/11/05 职场文书
上下班时间调整通知
2015/04/23 职场文书
2015年暑假生活总结
2015/07/13 职场文书
国家助学金受助感言
2015/08/01 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
nginx配置之并发频次限制
2022/04/18 Servers