window.addeventjs事件驱动函数集合addEvent等


Posted in Javascript onFebruary 19, 2008

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
  if (element.addEventListener) {
    element.addEventListener(type, handler, false);
  } else {
    // assign each event handler a unique ID
    if (!handler.$$guid) handler.$$guid = addEvent.guid++;
    // create a hash table of event types for the element
    if (!element.events) element.events = {};
    // create a hash table of event handlers for each element/event pair
    var handlers = element.events[type];
    if (!handlers) {
      handlers = element.events[type] = {};
      // store the existing event handler (if there is one)
      if (element["on" + type]) {
        handlers[0] = element["on" + type];
      }
    }
    // store the event handler in the hash table
    handlers[handler.$$guid] = handler;
    // assign a global event handler to do all the work
    element["on" + type] = handleEvent;
  }
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
  if (element.removeEventListener) {
    element.removeEventListener(type, handler, false);
  } else {
    // delete the event handler from the hash table
    if (element.events && element.events[type]) {
      delete element.events[type][handler.$$guid];
    }
  }
};

function handleEvent(event) {
  var returnValue = true;
  // grab the event object (IE uses a global event object)
  event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
  // get a reference to the hash table of event handlers
  var handlers = this.events[event.type];
  // execute each event handler
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    if (this.$$handleEvent(event) === false) {
      returnValue = false;
    }
  }
  return returnValue;
};

function fixEvent(event) {
  // add W3C standard event methods
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {
  this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};

Javascript 相关文章推荐
监控 url fragment变化的js代码
Apr 19 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
Angular 向组件传递模板的两种方法
Feb 23 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
token 机制和实现方式
Dec 15 Javascript
setAttribute 与 class冲突解决
Feb 17 #Javascript
setInterval 和 setTimeout会产生内存溢出
Feb 15 #Javascript
一个js封装的不错的选项卡效果代码
Feb 15 #Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 #Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 #Javascript
Javascript优化技巧(文件瘦身篇)
Jan 28 #Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 #Javascript
You might like
PHP中的串行化变量和序列化对象
2006/09/05 PHP
十天学会php之第九天
2006/10/09 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
laravel学习教程之关联模型
2016/07/30 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
Vue项目中如何引入icon图标
2018/03/28 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
Python 画出来六维图
2019/07/26 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
如何进行Linux分区优化
2016/09/13 面试题
初婚初育证明
2014/01/14 职场文书
节水口号标语
2014/06/19 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
中秋节慰问信
2015/02/15 职场文书