PageSourceSearch

https://hetkarbeel.nl/wp-content/plugins/grandrestaurant-elementor/assets/js/jquery.smoove.js

js hetkarbeel.nl collected 2026-10-08 01:08:45 UTC 7,862 bytes, 292 lines download raw bytes

1/*!
2* jQuery Smoove v0.2.11 (http://smoove.js.org/)
3* Copyright (c) 2017 Adam Bouqdib
4* Licensed under GPL-2.0 (http://abemedia.co.uk/license) 
5*/
6
7(function($, window, document) {
8
9  // function for adding vendor prefixes
10  function crossBrowser(property, value, prefix) {
11
12	function ucase(string) {
13	  return string.charAt(0).toUpperCase() + string.slice(1);
14	}
15
16	var vendor = ['webkit', 'moz', 'ms', 'o'],
17	  properties = {};
18
19	for (var i = 0; i < vendor.length; i++) {
20	  if (prefix) {
21		value = value.replace(prefix, '-' + vendor[i] + '-' + prefix);
22	  }
23	  properties[ucase(vendor[i]) + ucase(property)] = value;
24	}
25	properties[property] = value;
26
27	return properties;
28  }
29
30  function smooveIt(direction) {
31	var height = $(window).height(),
32	  width = $(window).width();
33
34	for (var i = 0; i < $.fn.smoove.items.length; i++) {
35	  var $item = $.fn.smoove.items[i],
36		params = $item.params;
37		
38		if(!$item.hasClass('smooved'))
39		{	
40		  // if direction isn't set, set offset to 0 to avoid hiding objects that are above the fold
41		  var offset = (!direction || direction === 'down' && $item.css('opacity') === '1') ? 0 : params.offset,
42			itemtop = $(window).scrollTop() + height - $item.offset().top;
43
44		  // offset in %
45		  if (typeof offset === 'string' && offset.indexOf('%')) {
46			//console.log(offset);
47			offset = parseInt(offset) / 100 * height;
48			//console.log('offset '+offset+' | itemTop '+itemtop);
49		  }
50		  
51		  if (itemtop < offset || direction == 'first') {
52			  
53			  if (!isNaN(params.opacity)) {
54				$item.css({
55				  opacity: params.opacity
56				});
57			  }
58	
59			var transforms = [],
60			  properties = ['move', 'move3D', 'moveX', 'moveY', 'moveZ', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', 'scaleX', 'scaleY', 'skew', 'skewX', 'skewY'];
61	
62			for (var p = 0; p < properties.length; p++) {
63			  if (typeof params[properties[p]] !== "undefined") {
64				transforms[properties[p]] = params[properties[p]];
65			  }
66			}
67			
68			var transform = '';
69			for (var t in transforms) {
70			  transform += t.replace('move', 'translate') + '(' + transforms[t] + ') ';
71			}
72			
73			if (transform) {
74			  $item.css(crossBrowser('transform', transform));
75			  $item.parent().css(crossBrowser('perspective', params.perspective));
76			  //$item.parent().css(crossBrowser('transformStyle', params.transformstyle));
77	
78			  if (params.transformOrigin) {
79				$item.css(crossBrowser('transformOrigin', params.transformOrigin));
80			  }
81			}
82			
83			if(typeof params.delay !== "undefined" && params.delay > 0)
84			{
85				$item.css('transition-delay', parseInt(params.delay)+'ms');
86			}
87			
88			$item.addClass('first_smooved');
89			
90			/*if($item.hasClass('elementor-widget-image'))
91			{
92				console.log(itemtop + '<' + offset);
93			}*/
94			
95		  } else {
96				  if(!$item.hasClass('first_smooved') === true)
97				  {
98					  $item.css('opacity', 1).css(crossBrowser('transform', 'translate(0px, 0px)')).css('transform', '');
99					  $item.addClass('smooved');
100					  $item.parent().addClass('smooved');
101				}
102				else
103				{
104					jQuery('body').addClass('has-smoove');
105					
106					if(itemtop < offset || jQuery(window).height() >= jQuery(document).height())
107					//if(itemtop < offset)
108					{
109						$item.queue(function (next) { 
110							jQuery(this).css('opacity', 1).css(crossBrowser('transform', 'translate(0px, 0px)')).css('transform', '');
111							$item.addClass('smooved');
112							$item.parent().addClass('smooved');
113							$item.removeClass('first_smooved');
114							next(); 
115						});
116					}
117					else
118					{
119						$item.delay(1000).queue(function (next) { 
120							window.scrollTo(window.scrollX, window.scrollY+1);
121						});
122						
123						$item.removeClass('first_smooved');
124					}
125				}
126		  }
127		}
128	}
129  }
130
131  function throttle(fn, threshhold, scope) {
132	threshhold = threshhold || 250;
133	var last, deferTimer;
134	return function() {
135	  var context = scope || this,
136		now = +new Date(),
137		args = arguments;
138	  if (last && now < last + threshhold) {
139		// hold on to it
140		clearTimeout(deferTimer);
141		deferTimer = setTimeout(function() {
142		  last = now;
143		  fn.apply(context, args);
144		}, threshhold);
145	  } else {
146		last = now;
147		fn.apply(context, args);
148	  }
149	};
150  }
151
152  $.fn.smoove = function(options) {
153	$.fn.smoove.init(this, $.extend({}, $.fn.smoove.defaults, options));
154	return this;
155  };
156
157  $.fn.smoove.items = [];
158  $.fn.smoove.loaded = false;
159
160  $.fn.smoove.defaults = {
161	offset: '50%',
162	opacity: 0,
163	delay: '0ms',
164	duration: '500ms',
165	transition: "",
166	transformStyle: 'preserve-3d',
167	transformOrigin: false,
168	perspective: 1000,
169	min_width: 768,
170	min_height: false
171  };
172
173  $.fn.smoove.init = function(items, settings) {
174	  
175	items.each(function() {
176	  var $item = $(this),
177		params = $item.params = $.extend({}, settings, $item.data());
178
179	  $item.data('top', $item.offset().top);
180
181	  params.transition = crossBrowser('transition', params.transition, 'transform');
182	  $item.css(params.transition);
183
184	  $.fn.smoove.items.push($item);
185	});
186
187	// add event handlers
188	if (!$.fn.smoove.loaded) {
189	  $.fn.smoove.loaded = true;
190
191	  var oldScroll = 0,
192		oldHeight = $(window).height(),
193		oldWidth = $(window).width(),
194		oldDocHeight = $(document).height(),
195		resizing;
196
197	  // naughty way of avoiding vertical scrollbars when items slide in/out from the side
198	  if ($('body').width() === $(window).width()) {
199		$('body').addClass('smoove-overflow');
200	  }
201
202	  /*$(window).on("orientationchange resize", function() {
203		clearTimeout(resizing);
204		resizing = setTimeout(function() {
205		  var height = $(window).height(),
206			width = $(window).width(),
207			direction = (oldHeight > height) ? direction = 'up' : 'down',
208			items = $.fn.smoove.items;
209
210		  oldHeight = height;
211
212		  // responsive support - reassign position values on resize
213		  if (oldWidth !== width) {
214			for (var i = 0; i < items.length; i++) {
215			  items[i].css(crossBrowser('transform', '')).css(crossBrowser('transition', ''));
216			}
217
218			// wait for responsive magic to finish
219			var stillResizing = setInterval(function() {
220			  var docHeight = $(document).height();
221			  if (docHeight === oldDocHeight) {
222				window.clearInterval(stillResizing);
223				for (var i = 0; i < items.length; i++) {
224				  items[i].data('top', items[i].offset().top);
225				  items[i].css(items[i].params.transition);
226				}
227				smooveIt(direction);
228			  }
229			  oldDocHeight = docHeight;
230			}, 500);
231		  } else {
232			//smooveIt(direction);
233		  }
234		  oldWidth = width;
235		}, 500);
236	  });*/
237	  
238	  //Add iframe handler for Elementor editor
239	  if($('body').hasClass('elementor-editor-active'))
240	  {
241		  $('iframe#elementor-preview-iframe').ready(function(){
242			  smooveIt('first');
243
244			// throttle scroll handler
245			$(window).on('scroll', throttle(function() {
246			  var scrolltop = $(window).scrollTop(),
247				direction = (scrolltop < oldScroll) ? direction = 'up' : 'down';
248			  oldScroll = scrolltop;
249			  smooveIt(direction);
250			}, 250));
251			
252			window.scrollTo(window.scrollX, window.scrollY+1);
253		  });
254	   }
255	   else
256	   {
257		   jQuery(document).ready(function(){ 
258			smooveIt('down');
259			
260			// throttle scroll handler
261			$(window).on('scroll', throttle(function() {
262				//console.log('scroll');
263			  var scrolltop = $(window).scrollTop(),
264				direction = (scrolltop < oldScroll) ? direction = 'up' : 'down';
265			  oldScroll = scrolltop;
266			  smooveIt(direction);
267			  
268			}, 250));
269			
270			if(jQuery(window).height() >= jQuery(document).height())
271			{
272				smooveIt('down');
273			}
274			
275			//Firefox hack for firing first event
276			var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
277			if (isFirefox) {
278				window.scrollTo(window.scrollX, window.scrollY+1);
279			}
280			
281			//Touch devices hack for firing first event
282			var isTouch = ('ontouchstart' in document.documentElement);
283			if ( isTouch ) {
284				window.scrollTo(window.scrollX, window.scrollY+1);
285			}
286			
287		  });
288	   }
289	}
290  };
291
292}(jQuery, window, document));

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.