1/** 2 * jQuery plugin paroller.js v1.4.7 3 * https://github.com/tgomilar/paroller.js 4 * preview: https://tgomilar.github.io/paroller/ 5 * author: Tanja Gomilar 6 **/ 7(function (factory) { 8 'use strict'; 9 if (typeof define === 'function' && define.amd) { 10 define('parollerjs', ['jquery'], factory); 11 } else if (typeof module === 'object' && typeof module.exports === 'object') { 12 module.exports = factory(require('jquery')); 13 } 14 else { 15 factory(jQuery); 16 } 17})(function ($) { 18 'use strict'; 19 20 var working = false; 21 var scrollAction = function() { 22 working = false; 23 }; 24 25 var setDirection = { 26 bgVertical: function (elem, bgOffset) { 27 return elem.css({'background-position': 'center ' + -bgOffset + 'px'}); 28 }, 29 bgHorizontal: function (elem, bgOffset) { 30 return elem.css({'background-position': -bgOffset + 'px' + ' center'}); 31 }, 32 vertical: function (elem, elemOffset, transition, oldTransform) { 33 (oldTransform === 'none' ? oldTransform = '' : true); 34 return elem.css({ 35 '-webkit-transform': 'translateY(' + elemOffset + 'px)' + oldTransform, 36 '-moz-transform': 'translateY(' + elemOffset + 'px)' + oldTransform, 37 'transform': 'translateY(' + elemOffset + 'px)' + oldTransform, 38 'transition': transition, 39 'will-change': 'transform' 40 }); 41 }, 42 horizontal: function (elem, elemOffset, transition, oldTransform) { 43 (oldTransform === 'none' ? oldTransform = '' : true); 44 return elem.css({ 45 '-webkit-transform': 'translateX(' + elemOffset + 'px)' + oldTransform, 46 '-moz-transform': 'translateX(' + elemOffset + 'px)' + oldTransform, 47 'transform': 'translateX(' + elemOffset + 'px)' + oldTransform, 48 'transition': transition, 49 'will-change': 'transform' 50 }); 51 } 52 }; 53 54 var setMovement = { 55 factor: function (elem, width, options) { 56 var dataFactor = elem.data('paroller-factor'); 57 var factor = (dataFactor) ? dataFactor : options.factor; 58 if (width < 576) { 59 var dataFactorXs = elem.data('paroller-factor-xs'); 60 var factorXs = (dataFactorXs) ? dataFactorXs : options.factorXs; 61 return (factorXs) ? factorXs : factor; 62 } 63 else if (width <= 768) { 64 var dataFactorSm = elem.data('paroller-factor-sm'); 65 var factorSm = (dataFactorSm) ? dataFactorSm : options.factorSm; 66 return (factorSm) ? factorSm : factor; 67 } 68 else if (width <= 1024) { 69 var dataFactorMd = elem.data('paroller-factor-md'); 70 var factorMd = (dataFactorMd) ? dataFactorMd : options.factorMd; 71 return (factorMd) ? factorMd : factor; 72 } 73 else if (width <= 1200) { 74 var dataFactorLg = elem.data('paroller-factor-lg'); 75 var factorLg = (dataFactorLg) ? dataFactorLg : options.factorLg; 76 return (factorLg) ? factorLg : factor; 77 } else if (width <= 1920) { 78 var dataFactorXl = elem.data('paroller-factor-xl'); 79 var factorXl = (dataFactorXl) ? dataFactorXl : options.factorXl; 80 return (factorXl) ? factorXl : factor; 81 } else { 82 return factor; 83 } 84 }, 85 bgOffset: function (offset, factor) { 86 return Math.round(offset * factor); 87 }, 88 transform: function (offset, factor, windowHeight, height) { 89 return Math.round((offset - (windowHeight / 2) + height) * factor); 90 } 91 }; 92 93 var clearPositions = { 94 background: function (elem) { 95 return elem.css({'background-position': 'unset'}); 96 }, 97 foreground: function (elem) { 98 return elem.css({ 99 'transform' : 'unset', 100 'transition' : 'unset' 101 }); 102 } 103 }; 104 105 $.fn.paroller = function (options) { 106 var windowHeight = $(window).height(); 107 var documentHeight = $(document).height(); 108 109 // default options 110 var options = $.extend({ 111 factor: 0, // - to + 112 factorXs: 0, // - to + 113 factorSm: 0, // - to + 114 factorMd: 0, // - to + 115 factorLg: 0, // - to + 116 factorXl: 0, // - to + 117 transition: 'translate 0.1s ease', // CSS transition 118 type: 'background', // foreground 119 direction: 'vertical' // horizontal 120 }, options); 121 122 return this.each(function () { 123 var $this = $(this); 124 var width = $(window).width(); 125 var offset = $this.offset().top; 126 var height = $this.outerHeight(); 127 128 var dataType = $this.data('paroller-type'); 129 var dataDirection = $this.data('paroller-direction'); 130 var dataTransition = $this.data('paroller-transition'); 131 var oldTransform = $this.css('transform'); 132 133 var transition = (dataTransition) ? dataTransition : options.transition; 134 var type = (dataType) ? dataType : options.type; 135 var direction = (dataDirection) ? dataDirection : options.direction; 136 var factor = 0; 137 var bgOffset = setMovement.bgOffset(offset, factor); 138 var transform = setMovement.transform(offset, factor, windowHeight, height); 139 140 if (type === 'background') { 141 if (direction === 'vertical') { 142 setDirection.bgVertical($this, bgOffset); 143 } 144 else if (direction === 'horizontal') { 145 setDirection.bgHorizontal($this, bgOffset); 146 } 147 } 148 else if (type === 'foreground') { 149 if (direction === 'vertical') { 150 setDirection.vertical($this, transform, transition, oldTransform); 151 } 152 else if (direction === 'horizontal') { 153 setDirection.horizontal($this, transform, transition, oldTransform); 154 } 155 } 156 157 $(window).on('resize', function () { 158 var scrolling = $(this).scrollTop(); 159 width = $(window).width(); 160 offset = $this.offset().top; 161 height = $this.outerHeight(); 162 factor = setMovement.factor($this, width, options); 163 bgOffset = Math.round(offset * factor); 164 transform = Math.round((offset - (windowHeight / 2) + height) * factor); 165 166 if (! working) { 167 window.requestAnimationFrame(scrollAction); 168 working = true; 169 } 170 171 if (type === 'background') { 172 clearPositions.background($this); 173 if (direction === 'vertical') { 174 setDirection.bgVertical($this, bgOffset); 175 } 176 else if (direction === 'horizontal') { 177 setDirection.bgHorizontal($this, bgOffset); 178 } 179 } 180 else if ((type === 'foreground') && (scrolling <= documentHeight)) { 181 clearPositions.foreground($this); 182 if (direction === 'vertical') { 183 setDirection.vertical($this, transform, transition); 184 } 185 else if (direction === 'horizontal') { 186 setDirection.horizontal($this, transform, transition); 187 } 188 } 189 }); 190 191 $(window).on('scroll', function () { 192 var scrolling = $(this).scrollTop(); 193 var scrollTop = $(document).scrollTop(); 194 195 if (scrollTop === 0) { 196 factor = 0; 197 } else { 198 factor = setMovement.factor($this, width, options); 199 } 200 201 bgOffset = Math.round((offset - scrolling) * factor); 202 transform = Math.round(((offset - (windowHeight / 2) + height) - scrolling) * factor); 203 204 if (! working) { 205 window.requestAnimationFrame(scrollAction); 206 working = true; 207 } 208 209 if (type === 'background') { 210 if (direction === 'vertical') { 211 setDirection.bgVertical($this, bgOffset); 212 } 213 else if (direction === 'horizontal') { 214 setDirection.bgHorizontal($this, bgOffset); 215 } 216 } 217 else if ((type === 'foreground') && (scrolling <= documentHeight)) { 218 if (direction === 'vertical') { 219 setDirection.vertical($this, transform, transition, oldTransform); 220 } 221 else if (direction === 'horizontal') { 222 setDirection.horizontal($this, transform, transition, oldTransform); 223 } 224 } 225 }); 226 }); 227 }; 228});
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.