UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

140 lines (139 loc) 5.49 kB
import { debounce, extend } from './util'; import { Browser } from './browser'; /** * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element * ```html * <div id="Eventdiv"> </div> * <script> * let node: HTMLElement = document.querySelector("#Eventdiv"); * EventHandler.addEventListener(node, "click", function(){ * // click handler function code * }); * EventHandler.addEventListener(node, "onmouseover", function(){ * // mouseover handler function code * }); * EventHandler.removeEventListener(node, "click", function(){ * // click handler function code * }); * eventObj.clearEvents(); * </script> * ``` */ var EventHandler = /** @class */ (function () { function EventHandler() { } // to get the event data based on element EventHandler.addOrGetEventData = function (element) { if ('__eventList' in element) { return element.__eventList.events; } else { element.__eventList = {}; return element.__eventList.events = []; } }; /** * Add an event to the specified DOM element. * * @param {any} element - Target HTML DOM element * @param {string} eventName - A string that specifies the name of the event * @param {Function} listener - Specifies the function to run when the event occurs * @param {Object} bindTo - A object that binds 'this' variable in the event handler * @param {number} intDebounce - Specifies at what interval given event listener should be triggered. * @returns {Function} ? */ EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) { var eventData = EventHandler.addOrGetEventData(element); var debounceListener; if (intDebounce) { debounceListener = debounce(listener, intDebounce); } else { debounceListener = listener; } if (bindTo) { debounceListener = debounceListener.bind(bindTo); } var event = eventName.split(' '); for (var i = 0; i < event.length; i++) { eventData.push({ name: event[parseInt(i.toString(), 10)], listener: listener, debounce: debounceListener }); if (Browser.isIE) { element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener); } else { element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false }); } } return debounceListener; }; /** * Remove an event listener that has been attached before. * * @param {any} element - Specifies the target html element to remove the event * @param {string} eventName - A string that specifies the name of the event to remove * @param {Function} listener - Specifies the function to remove * @returns {void} ? */ EventHandler.remove = function (element, eventName, listener) { var eventData = EventHandler.addOrGetEventData(element); var event = eventName.split(' '); var _loop_1 = function (j) { var index = -1; var debounceListener; if (eventData && eventData.length !== 0) { eventData.some(function (x, i) { return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ? (index = i, debounceListener = x.debounce, true) : false; }); } if (index !== -1) { eventData.splice(index, 1); } if (debounceListener) { element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener); } }; for (var j = 0; j < event.length; j++) { _loop_1(j); } }; /** * Clear all the event listeners that has been previously attached to the element. * * @param {any} element - Specifies the target html element to clear the events * @returns {void} ? */ EventHandler.clearEvents = function (element) { var eventData = EventHandler.addOrGetEventData(element); var copyData = extend([], undefined, eventData); for (var i = 0; i < copyData.length; i++) { var parseValue = copyData[parseInt(i.toString(), 10)]; element.removeEventListener(parseValue.name, parseValue.debounce); eventData.shift(); } }; /** * Trigger particular event of the element. * * @param {any} element - Specifies the target html element to trigger the events * @param {string} eventName - Specifies the event to trigger for the specified element. * Can be a custom event, or any of the standard events. * @param {any} eventProp - Additional parameters to pass on to the event properties * @returns {void} ? */ EventHandler.trigger = function (element, eventName, eventProp) { var eventData = EventHandler.addOrGetEventData(element); for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) { var event_1 = eventData_1[_i]; if (event_1.name === eventName) { event_1.debounce.call(this, eventProp); } } }; return EventHandler; }()); export { EventHandler };