Programming

자바스크립트-캔바스 그림

sysman 2020. 12. 15. 11:05
객체를 활용한 이벤트

캔버스 그리기

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>마우스 드래깅으로 캔버스에 그림 그리기</title>

<script>

var ge = null; // 그래픽 에디터 객체를 가리키는 변수

var ke = null;

function init() {

    var canvas = null; // 캔버스 DOM 객체를 가리키는 변수

    var context = null; // 캔버스에 그림을 그리는 도구 객체를 가리키는 변수

   

    var kanvas = null;

    var kontext=null;

 

    canvas = document.getElementById("myCanvas");

    context = canvas.getContext("2d");

 

    kanvas = document.getElementById("kanvas");

    kontext=kanvas.getContext("2d");

   

    ge = new GraphicEditor(canvas, context); // 그래픽 에디터 객체 생성

    ke = new GraphicEditor(kanvas, kontext);

}

 

class GraphicEditor { // 캔버스에 그림 그리는 자바스크립트 클래스

    constructor(canvas, context) { // 생성자

        this.canvas = canvas;     // 프로퍼티 canvas 생성

        this.context = context; // 프로퍼티 context 생성

        this.startX = 0;    // 프로퍼티 startX 생성

        this.startY = 0;    // 프로퍼티 startY 생성

        this.drawing = false;    // 프로퍼티 drawing 생성

 

        // 선굵기와 색 초기화

        this.context.lineWidth = 2; // 선 굵기를 2로 설정

        this.context.strokeStyle = "blue";

 

        // 이벤트 리스너 등록

        this.canvas.onmousedown = function (e) { ge.down(e); }

        this.canvas.onmouseup = function (e) { ge.up(e); }

        this.canvas.onmousemove = function (e) { ge.move(e); }

        this.canvas.onmouseout = function (e) { ge.out(e); }

 

        // 이벤트 리스너가 canvas 객체에 달려 있기 때문에, 리스너가 실행되는 그 때

        // this는 canvas 객체를 가리키며, ge.down(e)를 this.down(e)로 한다면

        // 곧 canvas의 멤버 메소드 down(e)를 호출하는 것이 된다.

        // 하지만 canvas 객체에는 down(e) 메소드가 없기 때문에

        // 실행 중에 오류가 발생한다.

        // 그러므로 전역 변수 ge를 두어, ge.down(e)를 호출하도록 하였음

 

    }

   

   

   

 

    draw(curX, curY) {//(startX, startY)에서 (curX, curY) 까지 선그리는 메소드

        this.context.beginPath();

        this.context.moveTo(this.startX, this.startY);

        this.context.lineTo(curX, curY);

        this.context.stroke();

    }

 

    down(e) { // 마우스 다운시 호출되는 메소드

        this.startX = e.offsetX;

        this.startY = e.offsetY;

        this.drawing = true;

    }

 

    up(e) { this.drawing = false; } // 마우스 업 시 호출되는 메소드

 

    move(e) { // 마우스를 움직이는 동안 계속 호출되는 메소드

        if(!this.drawing) return;

        var curX = e.offsetX;

        var  curY = e.offsetY;

        ge.draw(curX, curY);

        this.startX = curX;

        this.startY = curY;

    }

 

    out(e) { this.drawing = false; } // 마우스가 캔버스 바깥으로 나가는 순간 호출되는 메소드

}

</script>

</head>

<body onload="init()">

<h3>마우스를 누른 채 드래깅하여 그림 그려 보세요</h3>

<hr>

<canvas id="myCanvas" style="background-color:aliceblue" width="400" height="300">

</canvas>

 

</body>

</html>

 

 

캔버스 그리고 저장

 

<!DOCTYPE html>

'Programming' 카테고리의 다른 글

git - centos 설치  (0) 2021.05.22
git 명령어  (0) 2020.12.21
Git 설치 for windows10  (0) 2020.12.21
자바스크립트 - 조심할 점  (0) 2020.12.09