leebom
[01-03] 노마드코더 - 바닐라JS로 게임만들기 03 본문
깃허브 주소 :
leebom21/paintjs01
Contribute to leebom21/paintjs01 development by creating an account on GitHub.
github.com
const canvas = document.getElementById("jsCanvas");
const ctx = canvas.getContext("2d");
const colors = document.getElementsByClassName("jsColor");
const range = document.getElementById("jsRange");
const mode = document.getElementById("jsMode");
const saveBtn = document.getElementById("jsSave");
const INITIAL_COLOR = "#2c2c2";
const CANVAS_SIZE = 700;
canvas.width = CANVAS_SIZE;
canvas.height = CANVAS_SIZE;
ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, CANVAS_SIZE, CANVAS_SIZE);
ctx.strokeStyle = INITIAL_COLOR;
ctx.fillStyle = INITIAL_COLOR;
ctx.lineWidth = 2.5;
let painting = false;
let filling = false;
function stopPainting() {
painting = false;
}
function startPainting() {
painting = true;
}
function onMouseMove(event) {
const x = event.offsetX;
const y = event.offsetY;
if(! painting) {
ctx.beginPath();
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
ctx.stroke();
}
}
function handleColorClick(event) {
const color= event.target.style.backgroundColor;
ctx.strokeStyle = color;
ctx.fillStyle = color;
}
function handleRangeChange(event) {
const size = event.target.value;
ctx.lineWidth = size;
}
function handleModeClick() {
if(filling === true) {
filling = false;
mode.innerText = "Fill";
}else {
filling = true;
mode.innerText = "Paint";
}
}
function HandleCanvasClick() {
if(filling){
ctx.fillRect(0, 0, CANVAS_SIZE, CANVAS_SIZE)
}
}
function handleCM(event) {
event.preventDefault();
}
function handleSaveClick() {
const image = canvas.toDataURL();
const link = document.createElement("a");
link.href = image;
link.download = "PaintJS [EXPORT]";
link.click();
}
if (canvas) {
canvas.addEventListener("mousemove", onMouseMove);
canvas.addEventListener("mousedown", startPainting);
canvas.addEventListener("mouseup", stopPainting);
canvas.addEventListener("mouseleave", stopPainting);
canvas.addEventListener("click", HandleCanvasClick);
addEventListener("contextmenu", handleCM); //우클릭 방지
}
Array.from(colors).forEach(color =>
color.addEventListener("click", handleColorClick)
);
if(range) {
range.addEventListener("input", handleRangeChange)
}
if(mode) {
mode.addEventListener("click", handleModeClick)
}
if(saveBtn) {
saveBtn.addEventListener("click", handleSaveClick);
}
'스터디 > 개인스터디(유투브 드림코딩 by엘리)(주5회)' 카테고리의 다른 글
[02-02] 노마드코더 - momentum 만들기 (0) | 2020.10.21 |
---|---|
[02-01] 노마드코더 - momentum 만들기 (0) | 2020.10.21 |
[01-02] 노마드코더 - 바닐라JS로 게임만들기 02 (0) | 2020.10.13 |
[01-01] 노마드코더 - 바닐라JS로 게임만들기 01 (0) | 2020.10.07 |
[22]예제테스트 - 웹사이트 제작 - 01 (0) | 2020.10.05 |
Comments