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