const one = (element, events, handler) => { let executed = false; let eventsArray = []; if (/array/i.test(Object.prototype.toString.call(events))) { eventsArray = events; } else { eventsArray.push(events); } // 事件觸發時執行,執行過程當中解綁,並改變標記變量executed的狀態 const onceHanler = e => { if (executed) { return; } eventsArray.forEach(eventName => element.removeEventListener(eventName, onceHanler, false)); handler(e); executed = true; } eventsArray.forEach(eventName => element.addEventListener(eventName, onceHanler, false)); }
one(element, ['animationend', 'webkitAnimationEnd', 'mozAnimationEnd'], handler);