1class SliderHandler extends elementorModules.frontend.handlers.Base { 2 getDefaultSettings() { 3 return { 4 selectors: { 5 thumbnails: ".avdivimg_slider_thumn", 6 sliderContainer: ".avdiv_wid_slider", 7 slides: ".avdivimg_slider_big", 8 }, 9 slideInterval: 4000, // valor por defecto 10 slideTransition: 1000, // valor por defecto 11 }; 12 } 13 14 getDefaultElements() { 15 const selectors = this.getSettings("selectors"); 16 return { 17 $thumbnails: this.$element.find(selectors.thumbnails), 18 $sliderContainer: this.$element.find(selectors.sliderContainer), 19 $slides: this.$element.find(selectors.slides), 20 }; 21 } 22 23 bindEvents() { 24 const settings = window.sliderSettings || {}; 25 this.elements.$thumbnails.on("click", this.onThumbnailClick.bind(this)); 26 this.startInterval(settings); 27 } 28 29 getSlideInterval(settings) { 30 return settings.slide_interval 31 ? settings.slide_interval 32 : this.getDefaultSettings().slideInterval; 33 } 34 35 getSlideTransition(settings) { 36 return settings.slide_transition 37 ? settings.slide_transition 38 : this.getDefaultSettings().slideTransition; 39 } 40 41 startInterval(settings) { 42 this.interval = setInterval( 43 this.nextSlide.bind(this),
44 this.getSlideInterval(settings) 45 ); 46 } 47 48 onThumbnailClick(event) { 49 const $thumbnail = jQuery(event.currentTarget); 50 const step = parseInt($thumbnail.data("step"), 10); 51 clearInterval(this.interval); 52 this.goToSlide(step); 53 this.startInterval(window.sliderSettings); // Restablecer el intervalo después del clic 54 } 55 56 goToSlide(slideIndex) { 57 const settings = window.sliderSettings || {}; 58 const transitionTime = this.getSlideTransition(settings); 59 const $targetSlide = this.elements.$slides.eq(slideIndex); 60 const targetOffset = slideIndex * $targetSlide.outerWidth(true); 61 62 this.elements.$sliderContainer.animate( 63 { 64 scrollLeft: targetOffset, 65 }, 66 transitionTime, 67 () => {} 68 ); // Animación suave usando el tiempo de transición configurado 69 } 70 71 nextSlide() { 72 let currentSlideIndex = this.elements.$slides.filter(".active").index(); 73 const totalSlides = this.elements.$slides.length; 74 75 if (currentSlideIndex === -1) { 76 currentSlideIndex = 0; 77 } 78 79 const nextSlideIndex = (currentSlideIndex + 1) % totalSlides; 80 81 this.elements.$slides 82 .removeClass("active") 83 .eq(nextSlideIndex) 84 .addClass("active"); 85 this.goToSlide(nextSlideIndex); 86 } 87} 88 89jQuery(window).on("elementor/frontend/init", () => { 90 const addHandler = ($element) => { 91 elementorFrontend.elementsHandler.addHandler(SliderHandler, { 92 $element, 93 }); 94 }; 95 96 elementorFrontend.hooks.addAction( 97 "frontend/element_ready/carrusel-de-alojamiento.default", 98 addHandler 99 ); 100});
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.