dom.js 1.7 KB
Newer Older
vipcxj's avatar
vipcxj committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/* eslint-disable no-param-reassign,prefer-rest-params */
/**
 * Created by yaohx_169 on 2017/5/10.
 */

/*
 * 添加事件处理程序
 * @param object object 要添加事件处理程序的元素
 * @param string type 事件名称,如click
 * @param function handler 事件处理程序,可以直接以匿名函数的形式给定,或者给一个已经定义的函数名。匿名函数方式给定的事件处理程序在IE6 IE7 IE8中可以移除,在标准浏览器中无法移除。
 * @param boolean remove 是否是移除的事件,本参数是为简化下面的removeEvent函数而写的,对添加事件处理程序不起任何作用
 */
export function addEvent(object, type, handler, remove) {
  if (typeof object !== 'object' || typeof handler !== 'function') return;
  try {
    object[remove ? 'removeEventListener' : 'addEventListener'](type, handler, false);
  } catch (e) {
    const xc = `_${type}`;
    object[xc] = object[xc] || [];
    if (remove) {
      const l = object[xc].length;
      for (let i = 0; i < l; i++) {
        if (object[xc][i].toString() === handler.toString()) object[xc].splice(i, 1);
      }
    } else {
      const l = object[xc].length;
      let exists = false;
      for (let i = 0; i < l; i++) {
        if (object[xc][i].toString() === handler.toString()) exists = true;
      }
      if (!exists) object[xc].push(handler);
    }
33
    object[`on${type}`] = function cb() {
vipcxj's avatar
vipcxj committed
34 35 36 37 38 39 40 41 42 43 44 45 46
      const l = object[xc].length;
      for (let i = 0; i < l; i++) {
        object[xc][i].apply(object, arguments);
      }
    };
  }
}
/*
 * 移除事件处理程序
 */
export function removeEvent(object, type, handler) {
  addEvent(object, type, handler, true);
}