SplideJS mit GenerateBlocks nutzen
GenerateBlocks ist richtig flexibel und praktisch. Ich mag den minimalen Ansatz und das Klassen-System, richtig gut umgesetzt. Ich arbeite gerne damit.
Was mir dabei jedoch ab und zu gefehlt hat, waren Slider-Funktionen und Modals/Popups. Diese zwei Dinge möchte ich mit einer schlanken, eleganten Lösung noch implementieren. Tabs und Accordions funktionieren sauber und zuverlässig.
Kadence, BricksExtras, Oxyextras etc. nutzt für die Slider Blöcke/Komponenten Splide. Finde die Library flexibel und gut durchdacht.
Hier nun die Anleitung, wie du SplideJS Version 4 mit GenerateBlocks nutzen kannst.
1. SplideJS laden
html in wp_head
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.3/dist/css/splide.min.css">
html in wp_footer
(mit AutoScroll – das ersetzt du am besten aber mit Marquees)
<!-- Include Splide JS -->
<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.3/dist/js/splide.min.js"></script>
<!-- Include the AutoScroll extension -->
<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/splide-extension-auto-scroll@0.5.1/dist/js/splide-extension-auto-scroll.min.js"></script>
2. Splide DOM Struktur anlegen
<!-- erster Slider -->
<section class="splide" id="first-slider">
<div class="splide__track">
<ul class="splide__list">
<li class="splide__slide">Slide 1</li>
<li class="splide__slide">Slide 2</li>
<li class="splide__slide">Slide 3</li>
</ul>
</div>
</section>
<!-- zweiter Slider -->
<section class="splide" id="second-slider">
<div class="splide__track">
<ul class="splide__list">
<li class="splide__slide">Slide 1</li>
<li class="splide__slide">Slide 2</li>
<li class="splide__slide">Slide 3</li>
</ul>
</div>
</section>
3. SplideJS initialisieren
document.addEventListener("DOMContentLoaded", function () {
// Erster Slider mit jeweiligen Optionen
var firstSlider = new Splide("#first-slider", {
type: "loop",
arrows: true,
pagination: true,
autoScroll: { // AutoScroll Extension
speed: 1,
},
});
// Zweiter Slider mit jeweiligen Optionen
var secondSlider = new Splide("#second-slider", {
type: "fade",
arrows: false,
pagination: false
});
// Beide Slider mounten
firstSlider.mount(window.splide.Extensions); // Mit AutoScroll Extension
secondSlider.mount(); // Standard, ohne Extensions
});
Ergänzungen
Am besten ist, wenn „splide__list“ ein ul element ist und die dazugehörigen „splide__slide“ li Elemente. Mit GB geht das aber nicht standardmässig, weil für Container Elemente keine ul oder li als Tags ausgewählt werden können.
Verschiedene Szenarien
Du hast nur einen Slider
Dann brauchst du die Slider nicht über deren #id zu mounten.
document.addEventListener("DOMContentLoaded", function () {
var splide = new Splide(".splide", {
type: "loop",
arrows: true,
pagination: true
});
splide.mount();
});
Du hast mehrere Slider aber alle haben die gleichen Optionen
Dann kannst du diese wie folgt mounten:
document.addEventListener("DOMContentLoaded", function () {
var splide = new Splide(".splide", {
type: "loop",
arrows: true,
pagination: true,
});
splide.mount();
});
var elms = document.getElementsByClassName("splide");
for (var i = 0; i < elms.length; i++) {
new Splide(elms[i]).mount();
}