UNPKG

@antv/x6

Version:

JavaScript diagramming library that uses SVG and HTML for rendering.

70 lines 2.18 kB
import { debounce } from './util'; export function createSensor(element) { let sensor = null; let listeners = []; const create = () => { if (getComputedStyle(element).position === 'static') { const style = element.style; style.position = 'relative'; } const obj = document.createElement('object'); obj.onload = () => { obj.contentDocument.defaultView.addEventListener('resize', trigger); trigger(); }; obj.style.display = 'block'; obj.style.position = 'absolute'; obj.style.top = '0'; obj.style.left = '0'; obj.style.height = '100%'; obj.style.width = '100%'; obj.style.overflow = 'hidden'; obj.style.pointerEvents = 'none'; obj.style.zIndex = '-1'; obj.style.opacity = '0'; obj.setAttribute('tabindex', '-1'); obj.type = 'text/html'; element.appendChild(obj); // for ie, should set data attribute delay, or will be white screen obj.data = 'about:blank'; return obj; }; const trigger = debounce(() => { listeners.forEach((listener) => listener(element)); }); const bind = (listener) => { if (!sensor) { sensor = create(); } if (listeners.indexOf(listener) === -1) { listeners.push(listener); } }; const destroy = () => { if (sensor && sensor.parentNode) { if (sensor.contentDocument) { sensor.contentDocument.defaultView.removeEventListener('resize', trigger); } sensor.parentNode.removeChild(sensor); sensor = null; listeners = []; } }; const unbind = (listener) => { const idx = listeners.indexOf(listener); if (idx !== -1) { listeners.splice(idx, 1); } // no listener, and sensor is exist then destroy the sensor if (listeners.length === 0 && sensor) { destroy(); } }; return { element, bind, destroy, unbind, }; } //# sourceMappingURL=object.js.map