PageSourceSearch

https://riad-alrimal.com/wp-content/plugins/hoteller-elementor/assets/js/jquery.smoove.js?ver=7.0.1

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