본문 바로가기
Js

gsap+smoothScroll

by 영감은어디에 2024. 7. 6.

gsap.registerPlugin(ScrollTrigger, ScrollSmoother);

if(ScrollTrigger.isTouch !==1){
    ScrollSmoother.create({
        wrapper:".wrapper",
        content:'.content',
        smooth:1.5,
        effects:true
    })
}


//top
gsap.fromTo(".hero-section", { opacity:1}, {
    opacity: 0, 
    scrollTrigger: {
        trigger: ".hero-section", 
        start: "center",
        end: "820",
        scrub: true

    }
})

//gallery
let itemsL = gsap.utils.toArray(".gallery__left .gallery__item")
itemsL.forEach(item => {
    gsap.fromTo(item, {x:-300, opacity:0}, {
        opacity: 1, x:0,
        scrollTrigger: {
            trigger: item, 
            start:"-850",
            end:"-50",
            scrub: true

        }
    })

})

let itemsR = gsap.utils.toArray(".gallery__right .gallery__item")
itemsR.forEach(item => {
    gsap.fromTo(item, {x:300, opacity:0}, {
        opacity: 1, x:0,
        scrollTrigger: {
            trigger: item, 
            start:"-850",
            end:"-50",
            scrub: true

        }
    })

})
:root {
    --index:calc(1vw + 1vh);
    --color-header: #f4efec;
    --color-text:#cdc6c3;
    --gallery-gap:calc(var(--index) * 10);
}
/* will-change */
.content, .gallery > *, .main-header { will-change: transform;}

.container{padding: 0 7vw; min-height: 100vh;}
.main-title { font-size: calc(var(--index) * 7); position: absolute; width: min-content; bottom: 12vh;}
.gallery{display: flex; padding: calc(var(--index) * 8) 0;}
.gallery > * { flex: 1; display: flex; align-items: center;flex-direction: column;}
.gallery__left{ margin-top: calc(var(--gallery-gap) * 0.5);}
.gallery__item { max-width: calc(var(--index) * 21); margin-bottom: var(--gallery-gap); max-height: 80vh; border-radius: 8px;}
<div class="wrapper">
    <div class="content">
        <div class="container">
        
            <header class="hero-section">
                <img src="./img/p2.png" alt="" data-speed="0.6" data-lag="0.5">
                <div class="main-header">
                    <h1 class="main-title">main<br>title</h1>
                </div>
            </header>
        
            <div class="port">
                <div class="container">
                    <main class="gallery">
                        <div class="gallery__left" data-speed="0.8">
                            <img class="gallery__item" src="img/2.jpg">
                            <img class="gallery__item" src="img/3.jpg">
                            <img class="gallery__item" src="img/4.jpg">
                        </div>
                        <div class="gallery__right" data-speed="1.1">
                            <img class="gallery__item" src="img/rabbit.png">
                            <img class="gallery__item" src="img/7.jpg">
                            <img class="gallery__item" src="img/5.jpg">
                        </div>
                    </main>
                </div>
            </div>
            
        </div>
    </div>
</div>

<script src="js/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/ScrollTrigger.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/ScrollSmoother.min.js"></script>

'Js' 카테고리의 다른 글

appendChild(), prepend()  (0) 2024.07.08
transform-style: preserve-3d, Object.assign(), 비효과  (0) 2024.07.07
horizon parallax, particle  (0) 2024.07.06
swiper bind  (0) 2024.07.06
gsap vertical  (0) 2024.07.05
scrolla plugin  (0) 2024.07.05
gsap toArray, forEach  (0) 2024.07.05
gsap2  (0) 2024.07.05