import { useEffect } from 'react';
import gsap from 'gsap';
import './App.css';
import ScrollTrigger from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger)
function App() {
useEffect(()=>{
const slides = document.querySelectorAll(".slide");
gsap.to(slides, {
xPercent: -100 * (slides.length - 1),
duration: 10,
scrollTrigger: {
trigger: ".wrapper",
scrub: 1,
pin: true,
end:"+=6000"
},
});
},[])
return (
<>
<div className='space'></div>
<div className="wrapper">
<div className="slider">
<div className="slides-wrapper">
{
Array(5).fill("").map((_,idx) => (
<div key={idx} className="slide">
<div className="content">
<h1>You Must Be Happy</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit, inventore esse. Voluptate eveniet autem excepturi incidunt sed laborum odio error ut, veritatis quam dolor et dolore asperiores eum voluptatibus ullam amet esse eius magni ducimus deserunt odit? Vel, cumque esse.</p>
</div>
</div>
))
}
</div>
</div>
</div>
<div className='space'></div>
</>
)
}
export default App;
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: wheat;
color: #141414;
}
.wrapper {
width: 100%;
}
.slider {
width: 100%;
height: 100vh;
overflow: hidden;
}
.slides-wrapper {
width: max-content;
height: 100vh;
display: flex;
}
.slide {
width: 100vw;
padding: 40px;
height: 100vh;
}
.slide .content {
display: flex;
width: 100%;
height: 100%;
flex-direction: column;
justify-content: space-around;
background: rgb(240, 207, 146);
border-radius: 15px;
padding: 40px;
}
.content h1 {
font-size: 5em;
}
.space {
background-color: lightblue;
height: 100vh;
width: 100%;
}