Splide.js
Splide.js est une bibliothèque JavaScript légère et performante pour créer des carrousels et sliders modernes. Elle est particulièrement adaptée pour les sliders de produits, galeries d'images et tout type de contenu défilant.
Installation
Dans le head
Ajoutez le CSS de Splide dans le <head> de votre fichier theme.liquid :
<!-- Splide : Used for all sliders on the website -->
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@splidejs/splide@latest/dist/css/splide.min.css" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/splide@latest/dist/css/splide.min.css">À la fin du body
Ajoutez le script JavaScript juste avant la fermeture de la balise </body> :
<!-- Splide : Used for all sliders on the website -->
<script src="https://cdn.jsdelivr.net/npm/@splidejs/splide@4/dist/js/splide.js"></script>Exemple de section
HTML
<div class="splide splide-{{section.id}}">
<div class="splide__track">
<ul class="splide__list">
{% for product in section.settings.collection.products %}
<li class="splide__slide">
{% render 'mm-product-card' product: product %}
</li>
{% endfor %}
</ul>
</div>
</div>JavaScript
document.addEventListener( 'DOMContentLoaded', function () {
let id = '.splide-{{section.id}}';
let splideElem = document.querySelector(id);
if (splideElem) {
new Splide( splideElem, {
type : 'slide',
arrows: false,
pagination: false,
gap: 20,
perPage: 4,
padding: {
right: '10rem',
left: '20px'
},
breakpoints: {
768: {
perPage: 2,
}
}
}).mount();
}
} );Options de configuration
Options principales
type: Type de slider ('slide','loop','fade')arrows: Afficher/masquer les flèches de navigation (true/false)pagination: Afficher/masquer les points de pagination (true/false)gap: Espacement entre les slides en pixelsperPage: Nombre de slides visibles simultanémentpadding: Padding à gauche et à droite du sliderbreakpoints: Configuration responsive pour différentes largeurs d'écran
Exemple avec flèches et pagination
new Splide( splideElem, {
type: 'loop',
arrows: true,
pagination: true,
gap: 30,
perPage: 3,
perMove: 1,
autoplay: true,
interval: 3000,
pauseOnHover: true,
breakpoints: {
1024: {
perPage: 2,
},
768: {
perPage: 1,
gap: 20,
}
}
}).mount();Exemple avec slider de type "fade"
new Splide( splideElem, {
type: 'fade',
rewind: true,
autoplay: true,
interval: 5000,
arrows: true,
pagination: true,
perPage: 1
}).mount();Exemple avec slider infini (loop)
new Splide( splideElem, {
type: 'loop',
perPage: 4,
gap: 20,
arrows: true,
pagination: false,
focus: 'center',
trimSpace: false,
breakpoints: {
768: {
perPage: 2,
},
480: {
perPage: 1,
}
}
}).mount();Options avancées
Autoplay
new Splide( splideElem, {
autoplay: true,
interval: 3000, // Délai en millisecondes
pauseOnHover: true, // Pause au survol
pauseOnFocus: true, // Pause lors du focus
resetProgress: false // Réinitialiser la progression
}).mount();Navigation au clavier
new Splide( splideElem, {
keyboard: 'global', // Navigation au clavier activée
arrowPath: 'M 15 0 L 0 15 L 15 30', // Personnaliser les flèches
}).mount();Vitesse et transitions
new Splide( splideElem, {
speed: 400, // Vitesse de transition en ms
easing: 'cubic-bezier(0.25, 1, 0.5, 1)', // Courbe d'animation
drag: true, // Autoriser le glisser-déposer
snap: true // Snap sur les slides
}).mount();Exemple complet avec section Shopify
<div class="splide splide-products-{{section.id}}">
<div class="splide__track">
<ul class="splide__list">
{% for product in section.settings.collection.products limit: section.settings.products_to_show %}
<li class="splide__slide">
{% render 'mm-product-card', product: product %}
</li>
{% endfor %}
</ul>
</div>
<!-- Flèches de navigation personnalisées -->
<div class="splide__arrows">
<button class="splide__arrow splide__arrow--prev">
<svg>...</svg>
</button>
<button class="splide__arrow splide__arrow--next">
<svg>...</svg>
</button>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const splideId = '.splide-products-{{section.id}}';
const splideElement = document.querySelector(splideId);
if (splideElement) {
new Splide(splideId, {
type: 'slide',
arrows: true,
pagination: true,
gap: '2rem',
perPage: 4,
perMove: 1,
autoplay: false,
breakpoints: {
1024: {
perPage: 3,
gap: '1.5rem'
},
768: {
perPage: 2,
gap: '1rem'
},
480: {
perPage: 1,
gap: '1rem'
}
}
}).mount();
}
});
</script>Notes importantes
- Initialisation : Toujours initialiser Splide après le chargement du DOM avec
DOMContentLoaded - Sélecteurs uniques : Utilisez
{{section.id}}pour créer des sélecteurs uniques par section - Vérification : Vérifiez toujours que l'élément existe avant d'initialiser (
if (splideElem)) - Performance : Utilisez
preloadpour le CSS afin d'améliorer les performances - Responsive : Configurez toujours les
breakpointspour une expérience mobile optimale
Ressources
- Documentation officielle : https://splidejs.com/ (opens in a new tab)
- CDN : https://cdn.jsdelivr.net/npm/@splidejs/splide@latest/ (opens in a new tab)
- GitHub : https://github.com/Splidejs/splide (opens in a new tab)