Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Add the following CSS and JavaScript to your page, and use the <code>addResizeListener</code> and <code>removeResizeListener</code> methods to listen for element size changes (blog post for further details: <a href="http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/" rel="nofollow noreferrer">http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/</a>):</p> <p><strong>Resize Sensor CSS</strong></p> <pre><code>.resize-triggers { visibility: hidden; } .resize-triggers, .resize-triggers &gt; div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers &gt; div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; } </code></pre> <p><strong>Resize Event Methods</strong></p> <p>The following is the JavaScript you’ll need to enable resize event listening. The first two functions are prerequisites that are used in the main addResizeListener and removeResizeListener methods.</p> <pre><code>(function(){ var attachEvent = document.attachEvent; if (!attachEvent) { var requestFrame = (function(){ var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn){ return window.setTimeout(fn, 20); }; return function(fn){ return raf(fn); }; })(); var cancelFrame = (function(){ var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; return function(id){ return cancel(id); }; })(); function resetTriggers(element){ var triggers = element.__resizeTriggers__, expand = triggers.firstElementChild, contract = triggers.lastElementChild, expandChild = expand.firstElementChild; contract.scrollLeft = contract.scrollWidth; contract.scrollTop = contract.scrollHeight; expandChild.style.width = expand.offsetWidth + 1 + 'px'; expandChild.style.height = expand.offsetHeight + 1 + 'px'; expand.scrollLeft = expand.scrollWidth; expand.scrollTop = expand.scrollHeight; }; function checkTriggers(element){ return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; } function scrollListener(e){ var element = this; resetTriggers(this); if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); this.__resizeRAF__ = requestFrame(function(){ if (checkTriggers(element)) { element.__resizeLast__.width = element.offsetWidth; element.__resizeLast__.height = element.offsetHeight; element.__resizeListeners__.forEach(function(fn){ fn.call(element, e); }); } }); }; } window.addResizeListener = function(element, fn){ if (attachEvent) element.attachEvent('resize', fn); else { if (!element.__resizeTriggers__) { if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; element.__resizeLast__ = {}; element.__resizeListeners__ = []; (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; element.__resizeTriggers__.innerHTML = '&lt;div class="expand-trigger"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;' + '&lt;div class="contract-trigger"&gt;&lt;/div&gt;'; element.appendChild(element.__resizeTriggers__); resetTriggers(element); element.addEventListener('scroll', scrollListener, true); } element.__resizeListeners__.push(fn); } }; window.removeResizeListener = function(element, fn){ if (attachEvent) element.detachEvent('resize', fn); else { element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); if (!element.__resizeListeners__.length) { element.removeEventListener('scroll', scrollListener); element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); } } } })(); </code></pre> <p><strong>Demo-licious!</strong></p> <p>Here’s a pseudo code usage of the method.</p> <pre><code>var myElement = document.getElementById('my_element'), myResizeFn = function(){ /* do something on resize */ }; addResizeListener(myElement, myResizeFn); removeResizeListener(myElement, myResizeFn); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload