Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/main/core/resize_observer/ |
Upload File : |
;(function() { 'use strict'; BX.namespace('BX'); var canUseNative = ( BX.type.isFunction(window.ResizeObserver) && BX.type.isFunction(window.ResizeObserverEntry) ); if (canUseNative) { BX.ResizeObserver = window.ResizeObserver; return; } /** * Implements ResizeObserver interface * @see https://wicg.github.io/ResizeObserver/#resize-observer-interface * * @param {function} callback * @constructor */ BX.ResizeObserver = function(callback) { this.callback = callback; this.targets = new BX.ResizeObserverItemCollection(); BX.ResizeObserver.observers.push(this); }; /** * Observers collection * @static * @type {BX.ResizeObserverCollection} */ BX.ResizeObserver.observers = new BX.ResizeObserverCollection(); /** * Broadcasts observations * @static * @private */ BX.ResizeObserver.broadcastObservation = function() { BX.ResizeObserver.observers.forEach(function(observer) { var activeTargets = observer.targets.getActive(); if (activeTargets.length) { clearTimeout(observer.timeout); observer.timeout = setTimeout(function() { observer.callback(activeTargets); }, 400); } }); BX.ResizeObserver.setFrameWait(BX.ResizeObserver.broadcastObservation); }; /** * @static * @private * @param callback */ BX.ResizeObserver.setFrameWait = function(callback) { setTimeout(function() { if (typeof window.requestAnimationFrame === 'function') { window.requestAnimationFrame(callback); } else { callback(); } }, 200); }; /** * Starts wait * @static * @private */ BX.ResizeObserver.run = function() { BX.ResizeObserver.setFrameWait(BX.ResizeObserver.broadcastObservation); }; BX.ResizeObserver.prototype = { /** * Adds target to the list of observed elements. * @param {HTMLElement} element */ observe: function(element) { if (!this.targets.hasTarget(element)) { this.targets.push(new BX.ResizeObserverItem(element)); } }, /** * Removes target from the list of observed elements. * @param {HTMLElement} element */ unobserve: function(element) { this.targets.removeTarget(element); }, /** * Clear observation targets list */ disconnect: function() { this.targets = new BX.ResizeObserverItemCollection(); } }; BX.ResizeObserver.run(); })();