1/** 2 * Scroll Resize - Frontend Script 3 * 4 * Scales down sticky elements as the user scrolls past the stick point. 5 * Add the class 'has-scroll-resize' to a sticky element to trigger. 6 * 7 * @package OlliePro 8 */ 9 10( function () { 11 'use strict'; 12 13 var MOBILE_BREAKPOINT = 781; 14 var SCROLL_DISTANCE = 200; 15 var MIN_SCALE = 0.85; 16 17 var elements = []; 18 19 function isMobile() { 20 return window.innerWidth <= MOBILE_BREAKPOINT; 21 } 22 23 function init() { 24 var els = document.querySelectorAll( '.has-scroll-resize' ); 25 26 if ( ! els.length ) { 27 return; 28 } 29 30 var initialScrollY = window.scrollY || window.pageYOffset; 31 32 els.forEach( function ( el ) { 33 var stickyOffset = getComputedStyle( el ).getPropertyValue( '--sticky-top-offset' ); 34 var stickyTop = stickyOffset ? parseFloat( stickyOffset ) : ( parseFloat( getComputedStyle( el ).top ) || 0 ); 35 36 var rect = el.getBoundingClientRect(); 37 var stickPoint = rect.top + initialScrollY - stickyTop; 38 39 elements.push( { 40 el: el, 41 stickPoint: stickPoint, 42 } ); 43 44 el.style.transformOrigin = 'top left'; 45 } ); 46 47 window.addEventListener( 'scroll', onScroll, { passive: true } ); 48 onScroll(); 49 } 50 51 function onScroll() { 52 if ( isMobile() ) { 53 elements.forEach( function ( item ) { 54 item.el.style.transform = ''; 55 } ); 56 return; 57 } 58 59 var scrollY = window.scrollY || window.pageYOffset; 60 61 elements.forEach( function ( item ) { 62 var scrolledPast = scrollY - item.stickPoint; 63 64 if ( scrolledPast > 0 ) { 65 var progress = Math.min( scrolledPast / SCROLL_DISTANCE, 1 ); 66 var scale = 1 - ( 1 - MIN_SCALE ) * progress; 67 item.el.style.transform = 'scale(' + scale + ')'; 68 } else { 69 item.el.style.transform = ''; 70 } 71 } ); 72 } 73 74 if ( document.readyState === 'loading' ) { 75 document.addEventListener( 'DOMContentLoaded', init ); 76 } else { 77 init(); 78 } 79} )();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.