아래 기능들을 가진 간단한 웹 그림판을 만듭니다.
const Canvas = document.getElementbyID("jsCanvas");
let painting = false;
function stopPainting(){
painting = false;
}
function startPainting(){
painting = true;
}
function onMouseMove(event){
const x = event.offsetX; //마우스가 캔버스 안에서 움직일 때의 x값
const y = event.offsetY; // ~ 때의 y값
}
if(canvas) {
canvas.addEventListener("mousemove", onMouseMove);
canvas.addEventListener("mousedown", startPainting);
canvas.addEventListener("mouseup", stopPainting);
canvas.addEventListener("mouseleave", stopPainting);
}
캔버스 : html요소 중 하나
context : 캔버스 요소에서 픽셀에 접근할 수 있는 방법 = 캔버스 안의 픽셀들
생성방법 : context variable을 선언한다.
const ctx = canvas.getContext("2d"); // 캔버스 안에서 픽셀을 컨트롤 하도록 함
const INITIAL_COLOR = "#2c2c2c";
canvas.width = 700;
canvas.height = 700;
ctx.fillStyle = "white";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.strokeStyle = INITIAL_COLOR;
ctx.fillStyle = INITIAL_COLOR;
ctx.lineWidth = 2.5;
function onMouseMove(event){
const x = event.offsetX; //마우스가 캔버스 안에서 움직일 때의 x값
const y = event.offsetY; // ~ 때의 y값
if (!painting) {
ctx.beginPath();
ctx.moveTo(x,y);
} else {
ctx.lineTo(x,y);
ctx.stroke();
}
const colors = document.getElementsByClassName("jsColor"); // 컬러칩 불러오기
Array.from(colors).forEach(color => color.addEventListener("click", handleColorClick))
function handleColorClick(event){
const color = event.target.style.backgroundColor;
ctx.strokeStyle = color;
ctx.fillStyle = color;
}
const range = document.getElementById("jsRange"); // 슬라이더 불러오기
if (range){ //range 슬라이더 인풋 감지
range.oninput = handleInput;
}
function handleInput(){
const rangeValue = range.value;
ctx.lineWidth = rangeValue;
}
const mode = document.getElementById("jsMode"); // fill 버튼
if (mode){ //fill 버튼 클릭 이벤트 감지
mode.addEventListener("click", handleMode);
}
let filling = false;
function fillCanvas() {
if(filling){ //filling이 true일 때
ctx.fillRect(0, 0, canvas.width, canvas.height); // 캔버스 크기만큼 채우기
}
}
function handleMode() { // fill 버튼클릭 시 실행함수
if (filling === true) {
filling = false;
mode.innerHTML = "FILL";
} else {
filling = true;
mode.innerHTML = "PAINT";
}
}
const mode = document.getElementById("jsMode"); // fill 버튼
if (save){ //save 버튼 클릭 이벤트 감지
save.addEventListener("click", saveImg);
}
function saveImg(){
const img = canvas.toDataURL("image/png"); // 캔버스 데이터 이미지로 변환
const link = document.createElement("a"); // html에 a태그 (링크) 생성
link.href = img; // 링크에 이미지 할당
link.download = ("PaintJs"); // 링크 다운로드 시 이름 할당
link.click(); // 링크 클릭이벤트 실행
}