[Javascript] requestAnimationFrame

[์›๋ณธ ๋งํฌ]

์ด๊ฑด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋“ฑ์— ๋งค์šฐ ์œ ์šฉํ•œ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์žฅํ•จ์ˆ˜๋‹ค.

window.๏ปฟrequestAnimationFrame(์ฝœ๋ฐฑํ•จ์ˆ˜)

๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ๋ฐ, ์ฝœ๋ฐฑ์„ ๋ฐ›์•„์„œ ๊ทธ๋ƒฅ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ํ•˜๊ธฐ ์ง์ „์— ์‹คํ–‰์‹œ์ผœ์ค„ ๋ฟ์ด๋‹ค.
ํ•ญ์ƒ ๋ Œ๋”๋ง ์ „์—๋งŒ ํ˜ธ์ถœ๋˜๋‹ˆ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์ด๋‚˜ ํ—›๋ฐ•์ž ์—†์ด ๋”ฑ๋”ฑ ํƒ€์ด๋ฐ์— ๋งž์ถฐ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธํŒ…ํ•˜๊ณ  ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด๊ฑธ ์ด์šฉํ•ด์„œ ์บ”๋ฒ„์Šค ๋ Œ๋”๋ง์„ ํ•œ๋‹ค๋ฉด, ์ด๋Ÿฐ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

<!DOCTYPE html>
<html>
    <body>
        <canvas id="canvas" width="500" height="500"></canvas>
    </body>
    <script>
        function drawCircle(color) {
            const canvas = document.getElementById("canvas");
            const context = canvas.getContext("2d");

            context.beginPath();
            context.arc(100, 75, 50, 0, 2 * Math.PI);
            context.fillStyle = color 
            context.fill()
            context.stroke();
        }

        let red = '#ff0000'
        let blue = '#0000ff'

        let color = red;

        function animationEvent(timestamp){
            if (color === red) {
                console.log(1)
                color = blue
            } else {
                console.log(2)
                color = red
            }

            drawCircle(color)

            window.requestAnimationFrame(animationEvent);
        }

        window.requestAnimationFrame(animationEvent);
    </script>
</html>

requestAnimationFrame๋Š” ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ๋Œ€๋กœ ๊ทธ๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๊ธฐ์„œ๋Š” ์žฌ๊ท€ํ˜ธ์ถœ๋กœ ๊ณ„์†ํ•ด์„œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฑธ๋„๋ก ํ–ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๊ณ„์† ์ƒ‰์ด ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค.
๋‚ด ๋…นํ™” ํ”„๋กœ๊ทธ๋žจ์ด ๋ Œ๋”๋ง ์†๋„๋ฅผ ๋ชป๋”ฐ๋ผ๊ฐ€์„œ ์ฒœ์ฒœํžˆ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ๊ต์ฒด์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ผ์„œ ๋ณด๋ผ์ƒ‰์œผ๋กœ ๋ณด์˜€๋‹ค.
๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
https://developer.mozilla.org/ko/docs/Web/API/Window/requestAnimationFrame