CSS 애니메이션 (2)

2023. 3. 13. 11:10zerobase/HTML&CSS

728x90

transform 속성

    ● ui를 브라우저에 그리는 순서를 만드는 방법

        ○ dom-tree

        ○ layout: width, height

        ○ paint: color

        ○ camposite: transform

 

복잡한 애니메이션이 필요할 때 - animation 속성

    ● wiggle 사용하기

마우스 움직임 추적하기

    ● mousemove로 마우스 추적하기

<body>
    <h1>x : <span id="x"></span> , y : <span id="y"></span> </h1>

<script>
    window.addEventListener("mousemove", 마우스추적);
    var x = document.querySelector('#x');
    var y = document.querySelector('#y');

    function 마우스추적(event) {
        x.innerHTML = event.clientX;
        y.innerHTML = event.clientY;
    }
</script>
</body>

    ● 커서의 위치에 따라 div의 위치 바꾸기

<body>
    <h1>x : <span id="x"></span> , y : <span id="y"></span> </h1>
    <div id="cursor"></div>
    <script>
        window.addEventListener("mousemove", 마우스추적);
        var x = document.querySelector('#x');
        var y = document.querySelector('#y');
        var cursor = document.querySelector('#cursor');

        function 마우스추적(event) {
            x.innerHTML = event.clientX;
            y.innerHTML = event.clientY;
            cursor.style.top = (event.clientY - 25) + "px";
            cursor.style.left = (event.clientX - 25) + "px";
        }
    </script>
</body>

 

    ● transform으로 커서 따라 움직이기

<body>
    <h1>x : <span id="x"></span> , y : <span id="y"></span> </h1>
    <div id="cursor"></div>
    <script>
        window.addEventListener("mousemove", 마우스추적);
        var x = document.querySelector('#x');
        var y = document.querySelector('#y');
        var cursor = document.querySelector('#cursor');

        function 마우스추적(event) {
            x.innerHTML = event.clientX;
            y.innerHTML = event.clientY;
            let value = (event.clientX - 25) + "px," + (event.clientY - 25) + "px";
            cursor.style.transform = "translate(" + value + ") ";
        }
    </script>
</body>

 

    ● 마우스의 움직임에 따라 글씨 쓰기

<body>
    <div id="targetBox">
        <div id="blind"></div>
        <h1>안녕하세요! 째재입니다.</h1>
    </div>
    <script>
        var targetBox = document.querySelector("#targetBox");
        var blind = document.querySelector("#blind");

        targetBox.addEventListener("mousemove", function (e) {
            blind.style.transform = "translateX(" + e.clientX + "px)";
        })
    </script>
</body>
#targetBox {
    width: auto;
    display: inline-block;
    border: 1px solid red;
    position: relative;
    overflow: hidden;
}

#targetBox h1 {
    margin: 0px;
    padding: 20px;
    font-size: 1.5rem;
}

#blind {
    width: 100%;
    height: 100%;
    position: absolute;
    background-color: red;
    top: 0;
    left: 0;
}

스크롤 위치 추적하기

        스크롤 만들기

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>

<body>
    <div class="scroll-outer">
        <div class="scroll-inner"></div>
    </div>
</body>

<script>
    window.addEventListener("scroll", function () {
        console.log(document.documentElement.scrollTop + window.innerHeight);
    })
</script>
$radius: 14px;

body {
    height: 1000vh;
    background: rgb(2, 0, 36);
    background: linear-gradient(45deg, rgba(2, 0, 36, 1) 0%, rgba(9, 9, 121, 1) 35%, rgba(0, 212, 255, 1) 100%);
}

.scroll-outer {
    position: fixed;
    width: 10px;
    height: 100px;
    border-radius: $radius;
    top: 50%;
    right: 10px;
    transform: translate(-50%);
    background-color: gray;
}

.scroll-inner {
    width: 100%;
    height: 0px;
    position: absolute;
    top: 0;
    background-color: yellow;
    border-radius: $radius;
}

 

 

         ○ 문서의 전체 높이 :  document.documentElement.scrollHeight

         ○ 브라우저가 보여주고 있는 높이: window.innerHeight

         ○ 스크롤의 위치: document.documentElement.scrollTop

         ○ 스크롤의 위치 / (문서의 전체 높이 - 브라우저가 보여주고 있는 높이 ) * 100%         

 

    ● 브라우저 위치에 따라 스크롤 위치 변하기

<script>
    var scrollY = 0;
    var target = document.querySelector(".scroll-inner");

    window.addEventListener("scroll", function () {
        var documentHeight = document.documentElement.scrollHeight;
        var browserHeight = window.innerHeight;
        scrollY = document.documentElement.scrollTop;
        var percent = scrollY / (documentHeight - browserHeight) * 100 + "%";
        target.style.height = percent;
        console.log(percent);
    })
</script>

 

    ● console 창에 숫자 정수로 나오게

<script>
    var scrollY = 0;
    var target = document.querySelector(".scroll-inner");

    window.addEventListener("scroll", function () {
        var documentHeight = document.documentElement.scrollHeight;
        var browserHeight = window.innerHeight;
        scrollY = document.documentElement.scrollTop;
        var percent = scrollY / (documentHeight - browserHeight) * 100;
        target.style.height = Math.round(percent) + "%";
        console.log(percent, Math.round(percent));
    })
</script>

 

    ● 스크롤바 가로로

<script>
    var scrollY = 0;
    var target = document.querySelector(".scroll-inner");

    window.addEventListener("scroll", function () {
        var documentHeight = document.documentElement.scrollHeight;
        var browserHeight = window.innerHeight;
        scrollY = document.documentElement.scrollTop;
        var percent = scrollY / (documentHeight - browserHeight) * 100;
        target.style.width = Math.round(percent) + "%";
        console.log(percent, Math.round(percent));
    })
</script>
$radius: 14px;

body {
    height: 1000vh;
    background: rgb(2, 0, 36);
    background: linear-gradient(45deg, rgba(2, 0, 36, 1) 0%, rgba(9, 9, 121, 1) 35%, rgba(0, 212, 255, 1) 100%);
}

.scroll-outer {
    position: fixed;
    width: 100vw;
    height: 5px;
    border-radius: $radius;
    top: 10px;
    left: 50%;
    transform: translateX(-50%);
    background-color: gray;
    overflow: hidden;
}

.scroll-inner {
    width: 0px;
    height: 100%;
    position: absolute;
    top: 0;
    background-color: yellow;
    border-radius: $radius;
}

'zerobase > HTML&CSS' 카테고리의 다른 글

핵심 CSS(2)  (0) 2023.03.14
핵심 CSS(1)  (0) 2023.03.14
css 애니메이션(1)  (1) 2023.03.13
SASS  (0) 2023.03.12
에어비앤비 클론코딩  (0) 2023.03.12