본문 바로가기
개발기록/Javascript

[JS] 자바스크립트 캔버스 그림판 만들기1 - canvas

by spectrum20 2022. 2. 8.

먼저, 모질라 캔버스 API 사용법 

https://developer.mozilla.org/ko/docs/Web/API/Canvas_API/Tutorial/Basic_usage

 

캔버스(Canvas) 기본 사용법 - Web API | MDN

<canvas> HTML 엘리먼트를 살펴보는 것으로 이 튜토리얼을 시작해 보겠습니다. 이 페이지의 끝에서 캔버스 2D 컨텍스트를 설정하는 방법을 알게되고, 여러분의 브라우저에서 첫 번째 예제를 그리

developer.mozilla.org

 

라떼는~ 인터넷으로 플래시게임이라는 것을 많이 했었다

(지금은 유물속으로 사라진 야후꾸러기 같은...ㅜㅜ)

https://vidkidz.tistory.com/

웹에서 이런 플래시게임을 할 수 있었던 것은, 어도비사의 플래시 플레이어 덕분이었다

그러나, 보안 문제로 어도비 플래시에 대한 지원이 점점 사라져서

지금은 유물이 되어버렸다

 

아무튼 어도비 플래시 없이도 웹에서 그림을 그리고 하는 그래픽을 구현할 수 있는데

그 중 하나가 바로 Canvas API를 사용하는 방법이다

 

HTML, JavaScript로 그림판 구현하기

<body>
    <canvas id='canvas' width='500' height='500' style="border:1px solid black"></canvas>
    </body>
    <script>
    var pos = {
        drawable : false,
        x : -1,
        y : -1,
    };
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    var rect = canvas.getBoundingClientRect();  // 터치 스크린
    
    canvas.addEventListener("mousedown", listener);
    canvas.addEventListener("mousemove", listener);
    canvas.addEventListener("mouseup", listener);
    canvas.addEventListener("mouseout", listener);
    
    /// 터치 스크린
    canvas.addEventListener("touchstart", listener);
    canvas.addEventListener("touchmove", listener);
    canvas.addEventListener("touchend", listener);
    
    function listener(e){
        switch(e.type){
            case "mousedown":
                drawStart(e);
                break;
            case "mousemove":
                if(pos.drawable)
                    draw(e);
                break;
            case "mouseout":
            case "mouseup":
                drawEnd();
                break;
            case "touchstart":
                touchStart(e);
                break;
            case "touchmove":
                if(pos.drawable)
                    touch(e);
                break;
            case "touchend":
                drawEnd();
                break;
            default:
        }
    }
    
    function drawStart(e){
        pos.drawable = true;
        ctx.beginPath();
        pos.x = e.offsetX;
        pos.y = e.offsetY;
        ctx.moveTo(pos.x, pos.y);
    }
    function touchStart(e){
        pos.drawable = true;
        ctx.beginPath();
        pos.x = e.touches[0].pageX - rect.left
        pos.y = e.touches[0].pageY - rect.top
        ctx.moveTo(pos.x, pos.y);
    }
    function draw(e){
        ctx.lineTo(e.offsetX, e.offsetY);
        pos.x = e.offsetX;
        pos.y = e.offsetY;
        ctx.stroke();
    }
    function touch(e){
        ctx.lineTo(e.touches[0].pageX - rect.left, e.touches[0].pageY - rect.top);
        pos.x = e.touches[0].pageX - rect.left;
        pos.y = e.touches[0].pageY - rect.top;
        ctx.stroke();
    }
    function drawEnd(){
        pos.drawable = false;
        pos.x = -1;
        pos.y = -1;
    }
    </script>

 

 

예시

 

 

2편

2022.03.30 - [개발기록/Javascript] - [JS] 자바스크립트 캔버스 그림판 만들기 2 - canvas

 

[JS] 자바스크립트 캔버스 그림판 만들기 2 - canvas

자가격리 기념으로 할 일도 없어서 오랜만에 포스팅 2022.02.08 - [개발기록/Javascript] - [JS] 자바스크립트 캔버스 그림판 만들기1 - canvas [JS] 자바스크립트 캔버스 그림판 만들기1 - canvas 먼저, 모질라

spectrum20.tistory.com

 

반응형

댓글