Perfect for
Every Occasion
(function () {
function resolveWithin(sliderEl, sel) {
// 1) inside the slider
let el = sliderEl.querySelector(sel);
if (el) return el;
// 2) inside the immediate parent (common Webflow pattern: controls as siblings)
const parent = sliderEl.parentElement;
if (parent) {
el = parent.querySelector(sel);
if (el) return el;
}
// 3) optional higher wrapper if you use one (totally optional)
const wrapper = sliderEl.closest('[data-swiper-root]');
if (wrapper) {
el = wrapper.querySelector(sel);
if (el) return el;
}
return null; // let Swiper handle nulls gracefully
}
function initAll() {
document.querySelectorAll('.swiper.service-slider').forEach(function (sliderEl) {
if (sliderEl.__swiperInited) return; // avoid double init on Webflow redraws
sliderEl.__swiperInited = true;
const nextEl = resolveWithin(sliderEl, '[data-swiper-arrow="next"]');
const prevEl = resolveWithin(sliderEl, '[data-swiper-arrow="prev"]');
const paginationEl = resolveWithin(sliderEl, '.swiper-pagination'); // no extra class — per-instance element
const scrollbarEl = resolveWithin(sliderEl, '.swiper-progressbar');
new Swiper(sliderEl, {
speed: 400,
slidesPerView: 'auto',
spaceBetween: 0,
loop: true,
autoplay: {
delay: 3000,
disableOnInteraction: false,
pauseOnMouseEnter: true
},
navigation: {
nextEl: nextEl,
prevEl: prevEl,
disabledClass: 'is-disabled',
},
pagination: {
el: paginationEl,
clickable: true,
dynamicBullets: true,
dynamicMainBullets: 5,
},
scrollbar: {
el: scrollbarEl,
draggable: true,
},
});
});
}
// Run after Webflow and on DOM ready (covers Designer/Interactions redraws too)
window.Webflow = window.Webflow || [];
window.Webflow.push(initAll);
document.addEventListener('DOMContentLoaded', initAll);
})();
“Our wedding reception aboard ‘Emerald Horizon’ was beyond magical. Energetic Exotics handled everything seamlessly—from docking permits to the live band we requested. Our guests are still talking about the panoramic bay views and stellar service!”
Sophia & Mark
June 2024
(function () {
function resolveWithin(sliderEl, selector) {
// First check within the slider element
var el = sliderEl.querySelector(selector);
if (el) return el;
// Check parent
var parent = sliderEl.parentElement;
if (parent) {
el = parent.querySelector(selector);
if (el) return el;
}
// Check for wrapper with data attribute
var wrapper = typeof sliderEl.closest === 'function'
? sliderEl.closest('[data-swiper-root]')
: null;
if (wrapper) {
el = wrapper.querySelector(selector);
if (el) return el;
}
// Check grandparent
var grandParent = parent ? parent.parentElement : null;
if (grandParent) {
el = grandParent.querySelector(selector);
if (el) return el;
}
return null;
}
function initAll() {
var sliders = document.querySelectorAll('.swiper.is-testimonial');
sliders.forEach(function (sliderEl) {
// Prevent double initialization
if (sliderEl.__swiperInited) return;
sliderEl.__swiperInited = true;
var slides = sliderEl.querySelectorAll('.swiper-slide.is-testimonial');
var slideCount = slides ? slides.length : 0;
// Find navigation elements
var nextEl = resolveWithin(sliderEl, '[data-swiper-arrow="next"]');
var prevEl = resolveWithin(sliderEl, '[data-swiper-arrow="prev"]');
// Find pagination element - try both selectors
var paginationEl = resolveWithin(sliderEl, '.swiper-pagination.is-testimonial')
|| resolveWithin(sliderEl, '.swiper-pagination')
|| resolveWithin(sliderEl, '.swiper_bullets');
console.log('Swiper Init:', {
slideCount: slideCount,
nextEl: nextEl,
prevEl: prevEl,
paginationEl: paginationEl
});
// Hide controls if only 0 or 1 slide
if (slideCount === 0 || slideCount === 1) {
if (nextEl) nextEl.style.display = 'none';
if (prevEl) prevEl.style.display = 'none';
if (paginationEl) paginationEl.style.display = 'none';
return;
}
// Initialize Swiper
var swiperInstance = new Swiper(sliderEl, {
speed: 1000,
effect: 'fade',
fadeEffect: { crossFade: true },
slidesPerView: 1,
spaceBetween: 0,
navigation: nextEl && prevEl ? {
nextEl: nextEl,
prevEl: prevEl,
disabledClass: 'is-disabled'
} : false,
pagination: paginationEl ? {
el: paginationEl,
clickable: true,
dynamicBullets: true,
dynamicMainBullets: 5
} : false
});
console.log('Swiper initialized:', swiperInstance);
});
}
// Multiple init strategies to ensure it runs
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initAll);
} else {
initAll();
}
// Also hook into Webflow if available
if (window.Webflow) {
window.Webflow.push(initAll);
}
})();
Book Your Crewed
Yacht Today
Transform any occasion into a high-octane, luxury waterfront experience. From heartwarming proposals at high tide to full-scale gala fundraisers under the moonlight, we’ve got you covered—whether docked or sailing.
Thanks for submitting the form.
.webp)
































