1/** 2 * Skrollr 3 */ 4function isMobile() { 5 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 6} 7 8if (!isMobile()) { 9 if(jQuery(window).width() >= 1025){ 10 var s = skrollr.init(); 11 } 12 particlesJS('particles-js', 13 14 { 15 "particles": { 16 "number": { 17 "value": 80, 18 "density": { 19 "enable": true, 20 "value_area": 800 21 } 22 }, 23 "color": { 24 "value": "#ffffff", 25 }, 26 "shape": { 27 "type": "circle", 28 "stroke": { 29 "width": 0, 30 "color": "#ffffff", 31 "opacity": 0.1 32 }, 33 }, 34 "opacity": { 35 "value": 0.1, 36 "random": false, 37 "anim": { 38 "enable": false, 39 "speed": 2, 40 "opacity_min": 0.1, 41 "sync": false 42 } 43 }, 44 "size": { 45 "value": 5, 46 "random": true, 47 "anim": { 48 "enable": false, 49 "speed": 40, 50 "size_min": 0.1, 51 "sync": false 52 } 53 }, 54 "line_linked": { 55 "enable": true, 56 "distance": 150, 57 "color": "#ffffff", 58 "opacity": 0.1, 59 "width": 1 60 }, 61 "move": { 62 "enable": true, 63 "speed": 2, 64 "direction": "none", 65 "random": false, 66 "straight": false, 67 "out_mode": "out", 68 "attract": { 69 "enable": false, 70 "rotateX": 600, 71 "rotateY": 1200 72 } 73 } 74 }, 75 "interactivity": { 76 "detect_on": "canvas", 77 "events": { 78 "onhover": { 79 "enable": true, 80 "mode": "grab" 81 }, 82 "onclick": { 83 "enable": true, 84 "mode": "push" 85 }, 86 "resize": true 87 }, 88 "modes": { 89 "grab": { 90 "distance": 200, 91 "line_linked": { 92 "opacity": .4 93 } 94 }, 95 "bubble": { 96 "distance": 200, 97 "size": 10, 98 "duration": 2, 99 "opacity": .2, 100 "speed": 3 101 }, 102 "repulse": { 103 "distance": 200 104 }, 105 "push": { 106 "particles_nb": 4 107 }, 108 "remove": { 109 "particles_nb": 2 110 } 111 } 112 }, 113 "retina_detect": true, 114 } 115 116 ); 117} 118 119 120(function ($) { 121 $.fn.countTo = function (options) { 122 options = options || {}; 123 124 return $(this).each(function () { 125 // set options for current element 126 var settings = $.extend({}, $.fn.countTo.defaults, { 127 from: $(this).data('from'), 128 to: $(this).data('to'), 129 speed: $(this).data('speed'), 130 refreshInterval: $(this).data('refresh-interval'), 131 decimals: $(this).data('decimals') 132 }, options); 133 134 // how many times to update the value, and how much to increment the value on each update 135 var loops = Math.ceil(settings.speed / settings.refreshInterval), 136 increment = (settings.to - settings.from) / loops; 137 138 // references & variables that will change with each update 139 var self = this, 140 $self = $(this), 141 loopCount = 0, 142 value = settings.from, 143 data = $self.data('countTo') || {}; 144 145 $self.data('countTo', data); 146 147 // if an existing interval can be found, clear it first 148 if (data.interval) { 149 clearInterval(data.interval); 150 } 151 data.interval = setInterval(updateTimer, settings.refreshInterval); 152 153 // initialize the element with the starting value 154 render(value); 155 156 function updateTimer() { 157 value += increment; 158 loopCount++; 159 160 render(value); 161
162 if (typeof(settings.onUpdate) == 'function') { 163 settings.onUpdate.call(self, value); 164 } 165 166 if (loopCount >= loops) { 167 // remove the interval 168 $self.removeData('countTo'); 169 clearInterval(data.interval); 170 value = settings.to; 171 172 if (typeof(settings.onComplete) == 'function') { 173 settings.onComplete.call(self, value); 174 } 175 } 176 } 177 178 function render(value) { 179 var formattedValue = settings.formatter.call(self, value, settings); 180 $self.html(formattedValue); 181 } 182 }); 183 }; 184 185 $.fn.countTo.defaults = { 186 from: 0, // the number the element should start at 187 to: 0, // the number the element should end at 188 speed: 1000, // how long it should take to count between the target numbers 189 refreshInterval: 100, // how often the element should be updated 190 decimals: 0, // the number of decimal places to show 191 formatter: formatter, // handler for formatting the value before rendering 192 onUpdate: null, // callback method for every time the element is updated 193 onComplete: null // callback method for when the element finishes updating 194 }; 195 196 function formatter(value, settings) { 197 return value.toFixed(settings.decimals); 198 } 199}(jQuery)); 200 201var eventFired = false, 202 objectPositionTop = $('#numbers-section').offset().top - 400; 203 204$(window).on('scroll', function() { 205 206 var currentPosition = $(document).scrollTop(); 207 if (currentPosition > objectPositionTop && eventFired === false) { 208 eventFired = true; 209 $('.phone-count').data('countToOptions', { 210 formatter: function (value, options) { 211 return value.toFixed(options.decimals).replace(/\B(?=(?:\d{3})+(?!\d))/g, ','); 212 } 213 }); 214 215 // start all the timers 216 $('.phone-count').each(count); 217 218 function count(options) { 219 var $this = $(this); 220 options = $.extend({}, options || {}, $this.data('countToOptions') || {}); 221 $this.countTo(options); 222 } 223 } 224 225}); 226 227 228 229/** 230 * Swiper 231 */ 232jQuery(document).ready(function () { 233 let options = {}; 234 235 if ( jQuery(".swiper-wrapper .swiper-slide").length > 1 ) { 236 options = { 237 direction: 'horizontal', 238 loop: true, 239 allowTouchMove: true, 240 navigation: { 241 nextEl: '.swiper-button-next', 242 prevEl: '.swiper-button-prev', 243 }, 244 pagination: { 245 el: '.swiper-pagination', 246 type: 'bullets', 247 clickable: true, 248 }, 249 } 250 } else { 251 options = { 252 loop: false, 253 touchRatio: 0, 254 } 255 } 256 257 var swiper = new Swiper('.swiper-container', options); 258});
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.