티스토리 뷰

1. 개념
mouseEvent - canvas에서 자유롭게 선 그리기
canvas 객체에서 마우스 이벤트를 이용하면 드래그를 통해서 자유롭게 선을 그릴 수 있게 됨

속성

설명

mousedown

캔버스에서 마우스를 눌렀을 때 발생되는 이벤트

mousemove

캔버스에서 마우스가 움직이는 동안 발생되는 이벤트

mouseup

캔버스에서 눌러진 마우스를 떼었을 때 발생되는 이벤트

moueout

캔버스에서 마우스가 벗어났을 때 발생되는 이벤트

마우스에 있는 이벤트 발생하면 function(me)의 매개변수 me에 전달됨
2. 태그
mouseEvent
html5 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<! DOCTYPE html>
<html lang = "kr" >
<head>
<meta charset = "utf-8" >
<title> 키보드와 하루 </title>
</head>
<body>
<canvas id = "tcanvas" width = "300" height = "200" style =' border : 1px solid #000 '; > </canvas>
<script>
var canvas = document. getElementById ( "tcanvas" );
var context = canvas. getContext ( "2d" );
//canvas에 mousedown 이벤트 추가 : 이벤트 발생시 mDown 호출
canvas. addEventListener ( "mousedown" , function (me) {
mDown (me)}, false );
//canvas에 mousemove 이벤트 추가 : 이벤트 발생시 mMove 호출
canvas. addEventListener ( "mousemove" , function (me) {
mMove (me)}, false );
//canvas에 mouseup 이벤트 추가 : 이벤트 발생시 : mUp 호출
canvas. addEventListener ( "mouseup" , function (me) {
mUp (me)}, false );
//canvas에 mouseout 이벤트 추가 : 이벤트 발생시 mOut 호출
canvas. addEventListener ( "mouseout" , function (me) {
mOut (me)}, false );
//처음 마우스 X좌표
var stX =0;
//처음 마우스 Y좌표
var stY =0;
//마우스를 캔버스에서 움직였을 때 그림 그리기 여부
var drag = false ;
1
function mDown(me)
{
stX = me. offsetX ; //눌렀을 때 현재 마우스 X좌표를 stX에 담음
stY = me. offsetY ; //눌렀을 때 현재 마우스 Y좌표를 stY에 담음
drag = true ; //그림 그리기는 그리는 상태로 변경
}
2
function mMove(me)
{
//drag가 false 일때는 return(return 아래는 실행 안함)
if (!drag)
{
return ;
}
//마우스를 움직일 때마다 X좌표를 nowX에 담음
var nowX = me. offsetX ;
//마우스를 움직일 때마다 Y좌표를 nowY에 담음
var nowY = me. offsetY ;
//실질적으로 캔버스에 그림을 그리는 부분
canvasDraw (nowX,nowY);
//마우스가 움직일때마다 X좌표를 stX에 담음
stX = nowX;
//마우스가 움직일때마다 Y좌표를 stY에 담음
stY = nowY;
}
5
function canvasDraw(currentX,currentY)
{
context. beginPath ();
//마우스를 누르고 움직일 때마다 시작점을 재지정
context. moveTo (stX,stY);
//마우스 시작점부터 현재 점까지 라인 그리기
context. lineTo (currentX,currentY);
context. stroke ();
}
3
function mUp(me)
{
drag = false ; //마우스를 떼었을 때 그리기 중지
}
4
function mOut(me)
{
drag = false ; //마우스가 캔버스 밖으로 벗어났을 때 그리기 중지
}
</script>
</body>
</html>
결과 화면
코드 설명
1
function mDown(me)
마우스를 눌렀을 때 mDown 함수를 호출하면서 마우스 이벤트 객체를 me라는 매개변수로 던져주었습니다.
그래서 stX에는 눌렀을 때 마우스의 X좌표를 넣어주고 , stY에는 눌렀을 때 마우스의 Y좌표를 넣어줍니다.
이후 drag는 처음에는 false라고 해서 그리기가 되지 않게 하였지만 마우스를 눌렀을 때는 true로 변경해서 그림을 그리는 상태로 변경을 해주었습니다.
2
function mMove(me)
이제 마우스를 캔버스에서 움직일 때 이벤트입니다
처음에 if문으로 drag 체크하는 이유마우스를 누르고 움직이는지 그냥 움직이는지를 구분하기 위해서 입니다.
마우스를 눌렀을 때만 그림을 그려야 하고 누리지 않고 움직일 때는 그림이 그려지지 않기 위해서 if문을 두어서 구분을 하게 합니다.
즉, drag가 true이면 그리는 상태가 되고 그렇지 않고 false이면 그리기는 안되는 상태가 되는 것입니다.
그리고 nowX,nowY를 canvasDraw함수 매개변수로 던져주어서 그림을 그리게 하고 이후 stX,stY는 현재의 마우스 좌표로 다시 지정을 해줍니다.
3
function mUp(me)
마우스를 캔버스에서 눌렀다가 떼었을 때 발생하는 이벤트입니다.
마우스를 떼면 그리지 않아야 하므로 drag를 false로 설정합니다.
4
function mOut(me)
마우스가 캔버스를 벗어났을 때 발생하는 이벤트입니다.
이때에도 그리지는 중단되어야 하므로 drag를 false로 설정합니다.
5
function canvasDraw(currentX,currentY)
이제 실질적으로 그림이 그려지는 함수입니다.
beginPathf로 경로를 추가하고 moveTo로 시작점을 설정합니다.
시작점은 마우스를 눌렀을 때 마우스 위치와 마우스를 움직일 때 그림을 그려주고 다시 새로운 마우스 위치를 시작점으로 설정합니다.
그리고 lineTo는 시작점부터 현재 마우스 위치까지 그림을 그려 주게 됩니다.
쉽게 생각하면 점을 찍어서 연속으로 표시해 준다고 생각하시면 됩니다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday