[JS]canvas 5
canvas에 그림그리기, 색상선택 기능, css background 속성
1. canvas에 그림그리기
html css 기본 구조
<!DOCTYPE html>
<html>
<head>
<title>Canvas</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
canvas {
background: #eee;
}
.color-btn{
width: 30px;
height: 30px;
border: none;
}
.color-btn[data-color="black"]{
background-color: black;
}
.color-btn[data-color="red"]{
background-color: red;
}
.color-btn[data-color="green"]{
background-color: green;
}
.color-btn[data-color="blue"]{
background-color: blue;
}
</style>
</head>
<body>
<h1>Image</h1>
<canvas class="canvas" width="600" height="400">Image</canvas>
<div class="con">
<button class="color-btn" data-color="black"></button>
<button class="color-btn" data-color="red"></button>
<button class="color-btn" data-color="green"></button>
<button class="color-btn" data-color="blue"></button>
</div>
<script>
...
</script>
</body>
</html>
실행화면
js
변수
<script>
const canvas = document.querySelector('.canvas');
const ctx = canvas.getContext('2d');
const control = document.querySelector('.con');
let drawingMode=false;
let colorVal='black';
</script>
마우스를 클릭하고 드래그 하는동안만 그림을 그리기 위해 drawingMode변수를 정의, 색을 저장하기위한 colorVal 을 정의하였다.
이벤트함수
function upHandler(){
drawingMode=false;
}
function downHandler(){
drawingMode = true;
}
function moveHandler(e){
if(!drawingMode)
return;
ctx.beginPath();
ctx.arc(e.offsetX,e.offsetY,10,0,Math.PI*2);
ctx.fill();
}
canvas.addEventListener('mousedown',downHandler);
canvas.addEventListener('mousemove',moveHandler);
canvas.addEventListener('mouseup',upHandler);
캔버스에서 마우스를 클릭하고 드래그 하는 동안만 그림을 그리기 위해서 마우스를 눌렀을때 drawingMode
를 true로 설정하고, 마우스를 땠을때 drawingMode
를 false로 설정한다.
moveHandler()
에선 drawingMode
가 false이면 returna문으로 빠져나와 그림을 그리지 않고, true라면 원을 반복적으로 그려주어 그림을 그리게 된다.
2. 색상선택 기능
function setColor(e){
colorVal = e.target.getAttribute('data-color');
ctx.fillStyle = colorVal;
}
control.addEventListener('click',setColor);
e.target.getAttribute('data-color')
을 사용해서 색상 값을 추출한다.
<div class="con">
<button class="color-btn" data-color="black"></button>
<button class="color-btn" data-color="red"></button>
<button class="color-btn" data-color="green"></button>
<button class="color-btn" data-color="blue"></button>
</div>
html코드를 보면
<button>
에data-color
속성값이 정의되어 있다. 태그안에 클래스와 id를 제외하고 따로 속성값을 정의해 줄 수 있다는 사실을 처음 알았다..!
3. css background 속성
.image-btn{
width : 40px;
height : 40px;
background : url(./images/ilbuni1.png) no-repeat 50% 50% / cover;
}
background : url(./images/ilbuni1.png) no-repeat 50% 50% / cover;
- no-repeat은 백그라운드 이미지가 반복되지 않고 오직 한번만 보여지는 것
- 50% 50% / cover은 가로 50% 세로 50% 에 위치시키고, 이미지가 백그라운드 사이즈를 완전히 다 덮게 설정하는 것이다.
이미지가 잘 들어간 것을 볼 수 있다.
js 뿐만아니라 css도 더 공부 해야겠다고 느꼈다!
댓글남기기