UNPKG

element-resize-event-polyfill

Version:

Native event listener polyfill to capture element size changes

63 lines (53 loc) 1.46 kB
import ResizeObserver from 'resize-observer-polyfill' const addEventListener = EventTarget.prototype.addEventListener const createHTMLEvent = function(type) { const event = document.createEvent('HTMLEvents') event.initEvent(type) return event } export const EventListenerWrapper = function addEventListenerWrapper(type) { if (type === 'resize') { registerEvent(this) } addEventListener.apply(this, arguments) } function initObserver(callback) { const observer = (initObserver.observer = initObserver.observer || new ResizeObserver(callback)) observer.initialized = true return observer } function registerEvent(elm) { const observer = initObserver(entries => { if (observer.initialized) { observer.initialized = false return } for (let entry of entries) { const event = createHTMLEvent('resize') entry.target.dispatchEvent(event) if ( entry && entry.target && typeof entry.target.onresize === 'function' ) { entry.target.onresize(event) } // console.log('dispatch-event-resize') } }) observer.observe(elm) } HTMLElement.prototype.addEventListener = EventListenerWrapper Reflect.defineProperty(HTMLElement.prototype, 'onresize', { set(handler) { this._onresize = handler if (typeof handler !== 'function') { return } registerEvent(this) }, get() { return this._onresize || null }, })