본문 바로가기

개인공부

CSS : Scroll 사용

반응형

전체소스

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    body {
        margin: 0;
    }

    img {
        max-width: 100%;
    }

    .content {
        padding: 20%;
        /* viewport height */
        height: 1000vh;
        background-color: tomato;
    }

    .output {
        position: fixed;
        left: 0;
        top: 0;
        width: 100%;
        font-size: 2rem;
        font-weight: 200;
        columns: #fff;
        background: rgba(0, 0, 0, 0.4);
    }

    .among {
        width: 100px;
        margin: 20px auto;
        transition: 1s;
    }

    .among.zoom {
        transform: scale(2);
    }
</style>

<body>
    <div class="output">output</div>
    <div class="content">
        <p>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. In iusto necessitatibus sit repudiandae officiis
            commodi amet architecto similique ut deleniti minus dolor numquam consequuntur, quaerat aspernatur eligendi
            doloribus nesciunt obcaecati corporis voluptatum. Architecto iusto tempore, dolore, cum placeat iste nostrum
            nesciunt vitae saepe debitis, perferendis temporibus nemo quia error at cupiditate porro distinctio
            dignissimos voluptates sint explicabo neque natus. Unde accusamus laborum nam modi explicabo alias
            reprehenderit magnam debitis labore saepe! Earum molestiae, praesentium dolore corrupti ipsum obcaecati,
            saepe laborum debitis repellat explicabo iste quidem rerum quisquam possimus dignissimos accusamus eligendi
            nisi quam sapiente a. Minus consectetur modi earum repellat provident placeat, velit, dolorum delectus
            voluptate sed impedit rem animi voluptates, ducimus eos nesciunt quidem facilis praesentium? Debitis
            delectus nihil a ipsum maiores, voluptatum cumque eligendi dignissimos voluptates tempore modi repudiandae
            quia? Possimus maxime distinctio, nemo eos ullam quo omnis minima suscipit mollitia, iure quaerat maiores
            obcaecati iusto id exercitationem voluptatum error autem sit esse animi. Minus hic soluta nesciunt aliquam
            eum quos totam voluptas pariatur error ipsam cumque ex, quisquam, quaerat quia ab quod velit similique odit
            consectetur et modi quasi recusandae voluptate dolores. Nobis ipsum tenetur dicta laudantium reprehenderit
            numquam debitis necessitatibus deserunt, nostrum earum quis perferendis tempore placeat deleniti cumque
            accusantium aspernatur adipisci possimus minus asperiores repellendus impedit sequi dolorem ad? Veniam illum
            corporis fugiat quam labore architecto odit perspiciatis molestias consequatur, perferendis minus officiis
            porro eius quia earum, distinctio sed amet, quo iure! Atque cum nobis corporis, numquam, aliquid expedita
            ratione repellendus quaerat magnam libero neque amet provident iste dicta quisquam sequi molestias. Nesciunt
            reprehenderit explicabo error. Quae repellendus soluta vitae perferendis impedit reprehenderit dolor natus
            et nostrum voluptas ea exercitationem inventore vel non, repudiandae ut quod, culpa error similique atque
            temporibus. Assumenda asperiores vero commodi qui velit. Eum perferendis autem aut odio unde animi
            asperiores?
        </p>
        <figure class="among">
            <img src="images/1.png" alt="among">
        </figure>
    </div>
    <script>
        (function () {
            const ouputElem = document.querySelector('.output');
            const amongElem = document.querySelector('.among');

            function showValue() {
                // 윈도우 전역 객체가 가진 속성
                // ouputElem.innerHTML = window.pageYOffset;
                // ouputElem.innerHTML = amongElem.offsetTop;
                // 위치정보 크기들을 담은 객체임.
                let posY = amongElem.getBoundingClientRect().top;
                ouputElem.innerHTML = posY;

                if(posY < window.innerHeight * 0.2){
                    amongElem.classList.add('zoom');
                }else{
                    amongElem.classList.remove('zoom');
                }
                
            }

            window.addEventListener('scroll', function () {
                showValue();
            });
        })();
    </script>
</body>

</html>
  let posY = amongElem.getBoundingClientRect().top;

among 클래스의 위치를 top기준으로 가져온다. 현재 화면과 상대적인 top의 거리를 나타낸다. (반응형 웹만들때 편할듯)

 

window.innerHeight

window의 전체 크기를 가져오는 함수.

반응형

'개인공부' 카테고리의 다른 글

반응형 웹사이트 구현 (flex)  (0) 2021.01.08
CSS : transitinoend 이벤트  (0) 2021.01.01
javascript 클릭리스너 활용  (0) 2021.01.01
이벤트 위임  (2) 2020.12.30
CSS : 움직임, 클릭리스너 적용  (2) 2020.12.30