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