PageSourceSearch

https://parqueinnovacionba.com/wp-content/plugins/premium-addons-f…/js/premium-float-effects.js?ver=4.11.110

js parqueinnovacionba.com collected 2026-10-02 11:38:28 UTC 15,810 bytes, 523 lines download raw bytes

1(function ($) {
2
3	if ('undefined' == typeof window.paCheckSafari) {
4		window.paCheckSafari = checkSafariBrowser();
5
6		function checkSafariBrowser() {
7
8			var iOS = /iP(hone|ad|od)/i.test(navigator.userAgent) && !window.MSStream;
9
10			if (iOS) {
11				var allowedBrowser = /(Chrome|CriOS|OPiOS|FxiOS)/.test(navigator.userAgent);
12
13				if (!allowedBrowser) {
14					var isFireFox = '' === navigator.vendor;
15					allowedBrowser = allowedBrowser || isFireFox;
16				}
17
18				var isSafari = /WebKit/i.test(navigator.userAgent) && !allowedBrowser;
19
20			} else {
21				var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
22			}
23
24			if (isSafari) {
25				return true;
26			}
27
28			return false;
29		}
30
31	}
32
33	$(window).on('elementor/frontend/init', function () {
34		var paFloatingEffects = elementorModules.frontend.handlers.Base.extend({
35
36			floatingTarget: null,
37
38			targetSelector: null,
39
40			onInit: function () {
41
42				elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
43
44				//Return if animations should be disabled on Safari.
45				if (this.$element.hasClass('premium-disable-fe-yes') && window.paCheckSafari)
46					return;
47
48				var targetSelector = '' !== this.getElementSettings('premium_fe_target') ? this.getElementSettings('premium_fe_target') : '';
49
50				this.setFloatingTarget(targetSelector);
51
52				if (this.$element.hasClass('premium-floating-effects-yes')) {
53
54					this.run();
55
56				} else if (elementorFrontend.isEditMode()) {
57
58					if (anime.running.length) {
59						// Remove the animation if disabled in the editor.
60						this.removeFloatingAnimation(true);
61					}
62				}
63
64			},
65
66			onElementChange: function (propertyName) {
67				if ('premium_fe_switcher' === propertyName) {
68					anime.remove(this.floatingTarget);
69					this.resetTargetProps();
70				}
71			},
72
73			run: function () {
74				var _this = this,
75					eleSettings = this.getEffectSettings();
76
77				var hasEffects = Object.keys(eleSettings.effectSettings).length;
78
79				// Reset effects before applying it.
80				// Fix: disabled effects still works in the editor.
81				if (elementorFrontend.isEditMode() || !hasEffects) {
82					this.removeFloatingAnimation(false);
83				}
84
85				// Using IntersectionObserverAPI.
86				var eleObserver = new IntersectionObserver(function (entries) {
87					entries.forEach(function (entry) {
88						if (entry.isIntersecting) {
89							_this.applyEffects(eleSettings);
90							eleObserver.unobserve(entry.target); // to only execute the callback func once.
91						}
92					});
93				});
94
95				eleObserver.observe(_this.$element[0]);
96			},
97
98			removeFloatingAnimation: function (checkAnimation) {
99				// anime.js doesn't reset the manipulated properties, so we need to reset it manually.
100				var hasRunningAnime = checkAnimation ? this.hasRunningAnime() : true;
101
102				if (-1 !== hasRunningAnime) {
103					anime.remove(this.floatingTarget);
104					this.resetTargetProps();
105				}
106			},
107
108			hasRunningAnime: function () {
109				var currentTarget = this.targetSelector;
110
111				var hasRunningAnime = anime.running.findIndex(function (element) {
112
113					if (element.animatables && element.animatables.length > 0 && element.animatables[0].target) {
114						return $(element.animatables[0].target).is(currentTarget);
115					}
116
117					return false;
118				});
119
120				return hasRunningAnime;
121			},
122
123			resetTargetProps: function () {
124				$(this.floatingTarget).css({
125					transform: 'inherit',
126					opacity: 'inherit',
127					filter: 'inherit',
128					// background: 'inherit'
129				});
130			},
131
132			setFloatingTarget: function (target) {
133
134				var $widgetContainer = this.$element[0];
135
136				this.targetSelector = '.elementor-element-' + this.$element.data('id');
137
138				if (target) {
139					// If the selector does not exists in the current widget, then search in the whole page.
140					$widgetContainer = this.$element.find(target).length > 0 ? '.elementor-element-' + this.$element.data('id') + ' ' + target : target;
141					this.targetSelector = $widgetContainer;
142				}
143
144				this.floatingTarget = $widgetContainer;
145
146				// Remove any previously attached event handlers to prevent multiple bindings.
147				$(this.floatingTarget).off('.paFloating');
148			},
149
150			getEffectSettings: function () {
151				var settings = this.getElementSettings();
152
153				var easing = 'steps' === settings.premium_fe_easing ? 'steps(' + settings.premium_fe_ease_step + ')' : settings.premium_fe_easing,
154					translateEnabled = 'yes' === settings.premium_fe_translate_switcher,
155					rotateEnabled = 'yes' === settings.premium_fe_rotate_switcher,
156					scaleEnabled = 'yes' === settings.premium_fe_scale_switcher,
157					skewEnabled = 'yes' === settings.premium_fe_skew_switcher,
158					opacityEnabled = 'yes' === settings.premium_fe_opacity_switcher,
159					bgColorEnabled = 'yes' === settings.premium_fe_bg_color_switcher,
160					blurEnabled = 'yes' === settings.premium_fe_blur_switcher,
161					contrastEnabled = 'yes' === settings.premium_fe_contrast_switcher,
162					gScaleEnabled = 'yes' === settings.premium_fe_gScale_switcher,
163					hueEnabled = 'yes' === settings.premium_fe_hue_switcher,
164					brightEnabled = 'yes' === settings.premium_fe_brightness_switcher,
165					satEnabled = 'yes' === settings.premium_fe_saturate_switcher,
166					generalSettings = {
167						direction: settings.premium_fe_direction,
168						loop: 'default' === settings.premium_fe_loop ? true : settings.premium_fe_loop_number,
169						easing: easing,
170						target: '' !== settings.premium_fe_target ? settings.premium_fe_target : '',
171						trigger: settings.premium_fe_trigger,
172					};
173
174				var eleSettings = {
175					general: generalSettings,
176					effectSettings: {}
177				};
178
179				if (translateEnabled) {
180					eleSettings.effectSettings.translate = {
181						'x_param_from': settings.premium_fe_Xtranslate.sizes.from,
182						'x_param_to': settings.premium_fe_Xtranslate.sizes.to,
183						'y_param_from': settings.premium_fe_Ytranslate.sizes.from,
184						'y_param_to': settings.premium_fe_Ytranslate.sizes.to,
185						'duration': settings.premium_fe_trans_duration.size,
186						'delay': settings.premium_fe_trans_delay.size,
187					}
188				}
189
190				if (rotateEnabled) {
191					eleSettings.effectSettings.rotate = {
192						'x_param_from': settings.premium_fe_Xrotate.sizes.from,
193						'x_param_to': settings.premium_fe_Xrotate.sizes.to,
194						'y_param_from': settings.premium_fe_Yrotate.sizes.from,
195						'y_param_to': settings.premium_fe_Yrotate.sizes.to,
196						'z_param_from': settings.premium_fe_Zrotate.sizes.from,
197						'z_param_to': settings.premium_fe_Zrotate.sizes.to,
198						'duration': settings.premium_fe_rotate_duration.size,
199						'delay': settings.premium_fe_rotate_delay.size,
200					}
201				}
202
203				if (scaleEnabled) {
204					eleSettings.effectSettings.scale = {
205						'x_param_from': settings.premium_fe_Xscale.sizes.from,
206						'x_param_to': settings.premium_fe_Xscale.sizes.to,
207						'y_param_from': settings.premium_fe_Yscale.sizes.from,
208						'y_param_to': settings.premium_fe_Yscale.sizes.to,
209						'duration': settings.premium_fe_scale_duration.size,
210						'delay': settings.premium_fe_scale_delay.size,
211					}
212				}
213
214				if (skewEnabled) {
215					eleSettings.effectSettings.skew = {
216						'x_param_from': settings.premium_fe_Xskew.sizes.from,
217						'x_param_to': settings.premium_fe_Xskew.sizes.to,
218						'y_param_from': settings.premium_fe_Yskew.sizes.from,
219						'y_param_to': settings.premium_fe_Yskew.sizes.to,
220						'duration': settings.premium_fe_skew_duration.size,
221						'delay': settings.premium_fe_skew_delay.size,
222					}
223				}
224
225				if (opacityEnabled) {
226					eleSettings.effectSettings.opacity = {
227						'from': settings.premium_fe_opacity.sizes.from / 100,
228						'to': settings.premium_fe_opacity.sizes.to / 100,
229						'duration': settings.premium_fe_opacity_duration.size,
230						'delay': settings.premium_fe_opacity_delay.size
231					};
232				}
233
234				if (bgColorEnabled) {
235					eleSettings.effectSettings.bgColor = {
236						'from': settings.premium_fe_bg_color_from,
237						'to': settings.premium_fe_bg_color_to,
238						'duration': settings.premium_fe_bg_color_duration.size,
239						'delay': settings.premium_fe_bg_color_delay.size,
240					}
241				}
242
243				if (PremiumFESettings.papro_installed) {
244					if (blurEnabled) {
245						eleSettings.effectSettings.blur = {
246							'from': 'blur(' + settings.premium_fe_blur_val.sizes.from + 'px)',
247							'to': 'blur(' + settings.premium_fe_blur_val.sizes.to + 'px)',
248							'duration': settings.premium_fe_blur_duration.size,
249							'delay': settings.premium_fe_blur_delay.size,
250						}
251					}
252
253					if (contrastEnabled) {
254						eleSettings.effectSettings.contrast = {
255							'from': 'contrast(' + settings.premium_fe_contrast_val.sizes.from + '%)',
256							'to': 'contrast(' + settings.premium_fe_contrast_val.sizes.to + '%)',
257							'duration': settings.premium_fe_contrast_duration.size,
258							'delay': settings.premium_fe_contrast_delay.size,
259						}
260					}
261
262					if (gScaleEnabled) {
263						eleSettings.effectSettings.gScale = {
264							'from': 'grayscale(' + settings.premium_fe_gScale_val.sizes.from + '%)',
265							'to': 'grayscale(' + settings.premium_fe_gScale_val.sizes.to + '%)',
266							'duration': settings.premium_fe_gScale_duration.size,
267							'delay': settings.premium_fe_gScale_delay.size,
268						}
269					}
270
271					if (hueEnabled) {
272						eleSettings.effectSettings.hue = {
273							'from': 'hue-rotate(' + settings.premium_fe_hue_val.sizes.from + 'deg)',
274							'to': 'hue-rotate(' + settings.premium_fe_hue_val.sizes.to + 'deg)',
275							'duration': settings.premium_fe_hue_duration.size,
276							'delay': settings.premium_fe_hue_delay.size,
277						}
278					}
279
280					if (brightEnabled) {
281						eleSettings.effectSettings.bright = {
282							'from': 'brightness(' + settings.premium_fe_brightness_val.sizes.from + '%)',
283							'to': 'brightness(' + settings.premium_fe_brightness_val.sizes.to + '%)',
284							'duration': settings.premium_fe_brightness_duration.size,
285							'delay': settings.premium_fe_brightness_delay.size,
286						}
287					}
288
289					if (satEnabled) {
290						eleSettings.effectSettings.sat = {
291							'from': 'saturate(' + settings.premium_fe_saturate_val.sizes.from + '%)',
292							'to': 'saturate(' + settings.premium_fe_saturate_val.sizes.to + '%)',
293							'duration': settings.premium_fe_saturate_duration.size,
294							'delay': settings.premium_fe_saturate_delay.size,
295						}
296					}
297
298				}
299
300				return eleSettings;
301			},
302
303			applyEffects: function (eleSettings) {
304
305				var settings = eleSettings,
306					effectSettings = settings.effectSettings,
307					filterArr = [];
308
309				var animeSettings = {
310					targets: this.floatingTarget,
311					loop: settings.general.loop,
312					direction: settings.general.direction,
313					easing: settings.general.easing,
314				};
315
316				if (effectSettings.translate) {
317					var translate = effectSettings.translate,
318						x_translate = {
319							value: [translate.x_param_from || 0, translate.x_param_to || 0],
320							duration: translate.duration,
321							delay: translate.delay || 0
322						},
323						y_translate = {
324							value: [translate.y_param_from || 0, translate.y_param_to || 0],
325							duration: translate.duration,
326							delay: translate.delay || 0,
327						};
328
329					animeSettings.translateX = x_translate;
330					animeSettings.translateY = y_translate;
331				}
332
333				if (effectSettings.rotate) {
334					var rotate = effectSettings.rotate,
335						x_rotate = {
336							duration: rotate.duration,
337							delay: rotate.delay || 0,
338							value: [rotate.x_param_from || 0, rotate.x_param_to || 0],
339						},
340						y_rotate = {
341							duration: rotate.duration,
342							delay: rotate.delay || 0,
343							value: [rotate.y_param_from || 0, rotate.y_param_to || 0],
344						},
345						z_rotate = {
346							duration: rotate.duration,
347							delay: rotate.delay || 0,
348							value: [rotate.z_param_from || 0, rotate.z_param_to || 0],
349						};
350
351					animeSettings.rotateX = x_rotate;
352					animeSettings.rotateY = y_rotate;
353					animeSettings.rotateZ = z_rotate;
354				}
355
356				if (effectSettings.scale) {
357					var scale = effectSettings.scale,
358						x_scale = {
359							value: [scale.x_param_from || 0, scale.x_param_to || 0],
360							duration: scale.duration,
361							delay: scale.delay || 0
362						},
363						y_scale = {
364							value: [scale.y_param_from || 0, scale.y_param_to || 0],
365							duration: scale.duration,
366							delay: scale.delay || 0,
367						};
368
369					animeSettings.scaleX = x_scale;
370					animeSettings.scaleY = y_scale;
371				}
372
373				if (effectSettings.skew) {
374					var skew = effectSettings.skew,
375						x_skew = {
376							value: [skew.x_param_from || 0, skew.x_param_to || 0],
377							duration: skew.duration,
378							delay: skew.delay || 0
379						},
380						y_skew = {
381							value: [skew.y_param_from || 0, skew.y_param_to || 0],
382							duration: skew.duration,
383							delay: skew.delay || 0,
384						};
385
386					animeSettings.skewX = x_skew;
387					animeSettings.skewY = y_skew;
388				}
389
390				if (effectSettings.opacity) {
391					var opacity = effectSettings.opacity;
392
393					animeSettings.opacity = {
394						value: [opacity.from || 0, opacity.to || 0],
395						duration: opacity.duration,
396						delay: opacity.delay || 0
397					};
398				}
399
400				if (effectSettings.bgColor) {
401					var bgColor = effectSettings.bgColor;
402
403					animeSettings.backgroundColor = {
404						value: [bgColor.from || 0, bgColor.to || 0],
405						duration: bgColor.duration,
406						delay: bgColor.delay || 0
407					};
408				}
409
410				if (effectSettings.blur) {
411					var blur = effectSettings.blur,
412						blurEffect = {
413							value: [blur.from || 0, blur.to || 0],
414							duration: blur.duration,
415							delay: blur.delay || 0
416						};
417
418					filterArr.push(blurEffect);
419				}
420
421				if (effectSettings.hue) {
422					var hue = effectSettings.hue,
423						hueEffect = {
424							value: [hue.from || 0, hue.to || 0],
425							duration: hue.duration,
426							delay: hue.delay || 0
427						};
428
429					filterArr.push(hueEffect);
430				}
431
432				if (effectSettings.gScale) {
433					var gScale = effectSettings.gScale,
434						gScaleEffect = {
435							value: [gScale.from || 0, gScale.to || 0],
436							duration: gScale.duration,
437							delay: gScale.delay || 0
438						};
439
440					filterArr.push(gScaleEffect);
441				}
442
443				if (effectSettings.contrast) {
444					var contrast = effectSettings.contrast,
445						contrastEffect = {
446							value: [contrast.from || 0, contrast.to || 0],
447							duration: contrast.duration,
448							delay: contrast.delay || 0
449						};
450
451					filterArr.push(contrastEffect);
452				}
453
454				if (effectSettings.bright) {
455					var bright = effectSettings.bright,
456						brightEffect = {
457							value: [bright.from || 0, bright.to || 0],
458							duration: bright.duration,
459							delay: bright.delay || 0
460						};
461
462					filterArr.push(brightEffect);
463				}
464
465				if (effectSettings.sat) {
466					var sat = effectSettings.sat,
467						satEffect = {
468							value: [sat.from || 0, sat.to || 0],
469							duration: sat.duration,
470							delay: sat.delay || 0
471						};
472
473					filterArr.push(satEffect);
474				}
475
476				//add filter settings to animation settings
477				if (filterArr.length !== 0) {
478					animeSettings.filter = filterArr;
479				}
480
481				var animationTrigger = eleSettings.general.trigger;
482
483				if ('hover' === animationTrigger) {
484					animeSettings.autoplay = false;
485				}
486
487				// Override Elementor transition duration.
488				$(animeSettings.targets).css('transition-duration', '0s');
489
490				var floatingAnimation = anime(animeSettings);
491
492				if ('hover' === animationTrigger) {
493
494					$(animeSettings.targets).on('mouseenter.paFloating', () => {
495						this.playAnimation(floatingAnimation);
496					});
497
498					$(animeSettings.targets).on('mouseleave.paFloating', () => {
499						this.pauseAnimation(floatingAnimation);
500					});
501
502				}
503
504			},
505
506			playAnimation: function (animation) {
507				animation.play();
508			},
509
510			pauseAnimation: function (animation) {
511				animation.pause();
512			}
513		});
514
515		elementorFrontend.hooks.addAction('frontend/element_ready/widget', function ($scope) {
516			elementorFrontend.elementsHandler.addHandler(paFloatingEffects, {
517				$element: $scope
518			});
519		});
520
521	});
522
523})(jQuery);

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.