UNPKG

zz-shopify-components

Version:

Reusable Shopify components for theme projects

86 lines (78 loc) 2.5 kB
document.addEventListener('DOMContentLoaded', (event) => { if (!customElements.get('photo-swiper')) { customElements.define( 'photo-swiper', class PhotoSwiper extends HTMLElement { swiper = null; // swiper实例 constructor() { super(); // 初始化swiper // if (!this.swiper) { // this.initSwiper(); // } } // connectedCallback() { // this.initSwiper(); // } disconnectedCallback() { if (this.swiper) { this.swiper.destroy(); this.swiper = null; } } initSwiper() { const swiperContainer = this.querySelector('.swiper'); if (!swiperContainer) return; const slides = swiperContainer.querySelectorAll('.swiper-slide'); const imageCount = slides.length; this.swiper = new Swiper(swiperContainer, { slidesPerView: 1, spaceBetween: 0, pagination: { el: this.querySelector('.swiper-pagination'), type: 'bullets', clickable: true, dynamicBullets: false, }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, effect: 'slide', fadeEffect: { crossFade: true, }, loop: imageCount > 1, observer: true, observeParents: true, speed: 500, on: { init: function () { const paginationEl = this.pagination.el; const prevButton = swiperContainer.querySelector( '.swiper-button-prev' ); const nextButton = swiperContainer.querySelector( '.swiper-button-next' ); if (imageCount <= 1) { if (paginationEl) paginationEl.style.display = 'none'; if (prevButton) prevButton.style.display = 'none'; if (nextButton) nextButton.style.display = 'none'; } }, }, }); } // 销毁 destroySwiper() { if (this.swiper) { // 完全销毁swiper,包括所有事件监听器和DOM元素 this.swiper.destroy(true, true); this.swiper = null; } } } ); } });