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中eval函数的使用方法与示例
Apr 09 Javascript
jQuery .tmpl(), .template()学习资料小结
Jul 18 Javascript
javascript的parseFloat()方法精度问题探讨
Nov 26 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
Vue核心概念Getter的使用方法
Jan 18 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
从零搭一个自用的前端脚手架的方法步骤
Sep 23 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常用函数的使用汇总
2013/06/08 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
php组合排序简单实现方法
2016/10/15 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
Python 使用with上下文实现计时功能
2018/03/09 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
摄影助理岗位职责
2014/02/07 职场文书
大学军训感言200字
2014/02/26 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
校长个人总结
2015/03/03 职场文书
党员理论学习心得体会
2016/01/21 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby