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比较文档位置
Apr 08 Javascript
JavaScript实现select添加option
Jul 03 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
JavaScript使用键盘输入控制实现数字验证功能
Aug 19 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
微信小程序 合法域名校验出错详解及解决办法
Mar 09 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
Vue多环境代理配置方法思路详解
Jun 21 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 jQuery
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
python中常见错误及解决方法
2020/06/21 Python
python 实现表情识别
2020/11/21 Python
python 解决函数返回return的问题
2020/12/05 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
主要负责人任命书
2014/06/06 职场文书
幸福家庭标语
2014/06/27 职场文书
售后服务承诺函格式
2015/01/21 职场文书
雷锋之歌观后感
2015/06/10 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
nginx部署多前端项目的几种方法
2021/05/25 Servers
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
浅析MySQL如何实现事务隔离
2021/06/26 MySQL