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 png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
Mar 11 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
JavaScript实现in-place思想的快速排序方法
Aug 07 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
微信小程序实现跑马灯效果
Oct 21 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 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 form 表单传参明细研究
2009/07/17 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
js 异步处理进度条
2010/04/01 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
《鸿门宴》教学反思
2014/04/22 职场文书
通信工程求职信
2014/07/16 职场文书
2014年质检员工作总结
2014/11/18 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL