UNPKG

vimo

Version:

A Vue2.x UI Project For Mobile & HyBrid

64 lines (58 loc) 2.15 kB
/** * 判断的当前浏览器是否支持isPassive属性 * @return {Boolean} * */ function isPassive () { var supportsPassiveOption = false try { /* istanbul ignore next */ window.addEventListener( 'test', null, Object.defineProperty({}, 'passive', { get: function () { supportsPassiveOption = true } }) ) } catch (e) {} return supportsPassiveOption } /** * * 给addEventListener增加passive属性, 如果不支持将降级使用!!opts.capture, 事件的关闭需要自己手动解除, 切记!! * @param {Element|Window} ele - 监听的元素 * @param {string} eventName - 监听的名称 * @param {function} callback - 回调 * @param {object} [opts] - addEventListener的第三个参数 EventListenerOptions * @param {object} [opts.capture] - capture * @param {object} [opts.passive] - passive * @param {Array} [unregisterListenersCollection=[]] - 如果提供Function[], 则unReg将压如这个列表中 * @return {Function} - 返回removeEventListener的函数 */ export default function registerListener (ele, eventName, callback, opts = {}, unregisterListenersCollection = []) { // use event listener options when supported // otherwise it's just a boolean for the "capture" arg const listenerOpts = isPassive() ? { capture: !!opts.capture, passive: !!opts.passive } : !!opts.capture // use the native addEventListener ele['addEventListener'](eventName, callback, listenerOpts) let unReg = function unregisterListener () { ele['removeEventListener'](eventName, callback, listenerOpts) } if ( unregisterListenersCollection && Array.isArray(unregisterListenersCollection) ) { unregisterListenersCollection.push(unReg) } return unReg }