Slider Testimonial Text Stagger
Slider
Text Animation
Swiper
JS
GSAP
Split Text
CMS
Preview Links
Custom JS
Enable custom code in preview or view on published site.
Enable custom code?
Last Updated: Nov 11, 2025
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/SplitText.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css"/>
<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
gsap.registerPlugin(SplitText);
document.querySelectorAll(".slider-4_component").forEach((component) => {
if (component.hasAttribute("data-slider-4")) return;
component.setAttribute("data-slider-4", "");
const sliderElement = component.querySelector(".slider-4_wrap");
if (!sliderElement) return;
const quotes = component.querySelectorAll(".slider-4_blockquote");
SplitText.create(quotes, { type: "words", wordsClass: "word" });
function makeActive(slide) {
gsap.context(() => {
let tl = gsap.timeline();
tl.fromTo(slide.querySelectorAll(".word"), { y: "0.3em", opacity: 0 }, { y: "0rem", opacity: 1, stagger: {amount: 0.3} });
tl.fromTo(".slider-4_name", { y: "0.5rem", opacity: 0 }, { y: "0rem", opacity: 1 }, "<50%");
tl.fromTo(".slider-4_title", { y: "0.5rem", opacity: 0 }, { y: "0rem", opacity: 1 }, "<10%");
}, slide);
}
const swiper = new Swiper(sliderElement, {
slidesPerView: 1,
effect: "fade",
fadeEffect: { crossFade: true },
speed: 0,
loop: true,
allowTouchMove: true,
followFinger: false,
keyboard: {
enabled: true,
onlyInViewport: true,
},
pagination: {
el: component.querySelector(".slider-4_bullet_wrap"),
bulletActiveClass: "is-active",
bulletClass: "slider-4_bullet_item",
bulletElement: "button",
clickable: true,
},
slideActiveClass: "is-active",
slideDuplicateActiveClass: "is-active",
});
swiper.on('slideChange', function () {
makeActive(swiper.slides[swiper.activeIndex]);
});
});
});
</script>