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 相关文章推荐
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
判断JS对象是否拥有某种属性的两种方式
Dec 02 Javascript
Javascript 中创建自定义对象的方法汇总
Dec 04 Javascript
详解Angularjs filter过滤器
Feb 06 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
JS判断日期格式是否合法的简单实例
Jul 11 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
centos 上快速搭建ghost博客方法分享
May 23 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
关于ES6尾调用优化的使用
Sep 11 Javascript
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
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时间不正确的解决方法
2008/04/09 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
口头翻译求职人自荐信
2013/12/07 职场文书
骨干教师培训感言
2014/01/16 职场文书
函授药学自我鉴定
2014/02/07 职场文书
小学国庆节活动方案
2014/02/11 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
2015年健康教育工作总结
2015/04/10 职场文书