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 相关文章推荐
初探jquery——表单应用范例
Feb 20 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
jquery中动态效果小结
Dec 16 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
javascript中的隐式调用
Feb 10 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
使用refresh_token实现无感刷新页面
Apr 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中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
js微信分享API
2020/10/11 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue实现循环切换动画
2018/10/17 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
python邮件发送smtplib使用详解
2020/06/16 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
初中生期末考试的自我评价
2013/12/17 职场文书
优秀民警事迹材料
2014/01/29 职场文书
家长寄语大全
2014/04/02 职场文书
考试作弊检讨
2015/01/27 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
《法国号》教学反思
2016/02/22 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python