/* 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); } object[`on${type}`] = function cb() { 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); }