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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
Dec 16 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
Jun 02 Javascript
jquery日历插件e-calendar升级版
Nov 10 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
angular内置provider之$compileProvider详解
Sep 27 Javascript
JavaScript高级程序设计之变量与作用域
Nov 17 Javascript
JavaScript实现两个数组的交集
Mar 25 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 json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
php的sso单点登录实现方法
2015/01/08 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
php分页查询的简单实现代码
2017/03/14 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
JS前端加密算法示例
2016/12/22 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python中用Spark模块的使用教程
2015/04/13 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Django静态文件加载失败解决方案
2020/08/26 Python
python爬虫工具例举说明
2020/11/30 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
2014年质检工作总结
2014/11/26 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
深入理解python多线程编程
2021/04/18 Python