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 操作css实现代码
Jun 11 Javascript
基于jquery的分页控件(C#)
Jan 06 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
Aug 16 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
Jul 18 Javascript
antd多选下拉框一行展示的实现方式
Oct 31 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
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
解决vue addRoutes不生效问题
2020/08/04 Javascript
python中正则表达式的使用详解
2014/10/17 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
公司领导班子对照材料
2014/08/18 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
专职安全员岗位职责
2015/04/11 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS