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 indexOf()定义和用法
Oct 21 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
JavaScript对象数组的排序处理方法
Oct 21 Javascript
详解JavaScript树结构
Jan 09 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
Web技术实现移动监测的介绍
Sep 18 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
Aug 14 Javascript
Vue实现table上下移动功能示例
Feb 21 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
微信小程序canvas开发水果老虎机的思路详解
Feb 07 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使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php实现插入排序
2015/03/29 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
Vuex简单入门
2017/04/19 Javascript
js禁止表单重复提交
2017/08/29 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
python进行文件对比的方法
2018/12/24 Python
详解python中的线程与线程池
2019/05/10 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
美国滑板店:Tactics
2020/11/08 全球购物
即兴演讲稿
2014/01/04 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
食品安全标语
2014/06/07 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
财务总监岗位职责
2015/02/03 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
出国留学英文自荐信
2015/03/25 职场文书
首都博物馆观后感
2015/06/05 职场文书