IsNavigatorVisible = false; // T/F
...
onClickNavigator(event) {
this.IsNavigatorVisible = !event.currentTarget.classList.contains('active');
event.currentTarget.classList.toggle('active');
this.navigatorImageContainerEl.classList.toggle('hide');
// console.log(this.canvasEl.toDataURL());
updateNavigator() {
if (!this.IsNavigatorVisible) return;
this.navigatorImageEl.src = this.canvasEl.toDataURL();
}
assignElement() {
...
this.undoEl = this.toolbarEl.querySelector('#undo');
}
addEvent() {
...
this.undoEl.addEventListener('click', this.onClickUndo.bind(this));
}
default는 빈 배열에서 시작
undoArray = [];
onClickUndo() {
// 최초인 경우 alert, return
if (this.undoArray.length === 0) {
alert('더 이상 실행취소는 불가합니다.');
return;
}
let previousDataUrl = this.undoArray.pop(); // 배열의 마지막 요소 제거
let previousImage = new Image(); // 이전 이미지 객체 생성
previousImage.onload = () => {
// clearRect : 캔버스의 특정 영역 지우는 메소드
// clearRect(x, y, w, h)
this.context.clearRect(0, 0, this.canvasEl.width, this.canvasEl.height);
// drawImage : 캔버스에서 이미지를 그리는 메소드
// drawImage(image, ix, iy, iw, ih, cx, cy, cw, ch)
this.context.drawImage(
previousImage,
0,
0,
this.canvasEl.width,
this.canvasEl.height,
0,
0,
this.canvasEl.width,
this.canvasEl.height,
);
};
previousImage.src = previousDataUrl;
}
saveState() {
if (this.undoArray.length > 4) {
this.undoArray.shift(); // 배열의 첫번째 요소 제거
this.undoArray.push(this.canvasEl.toDataURL()); // 배열의 끝에 추가
} else {
this.undoArray.push(this.canvasEl.toDataURL());
}
// console.log(this.undoArray);
}
참고자료
캔버스 상태를 모두 초기화
assignElement() {
...
this.clearEl = this.toolbarEl.querySelector('#clear');
}
addEvent() {
...
this.clearEl.addEventListener('click', this.onClickClear.bind(this));
}
onClickClear() {
this.context.clearRect(0, 0, this.canvasEl.width, this.canvasEl.height);
this.undoArray = [];
this.updateNavigator();
this.initCanvasBackgroundColor();
}
캔버스에 그린 내용을 jpeg 확장자의 파일로 저장하는 기능
assignElement() {
...
this.donwloadLinkEl = this.toolbarEl.querySelector('#download');
}
addEvent() {
...
this.donwloadLinkEl.addEventListener(
'click',
this.onClickDonwload.bind(this),
);
}
onClickDonwload() {
this.donwloadLinkEl.href = this.canvasEl.toDataURL('image/jpeg', 1);
this.donwloadLinkEl.download = 'example.jpeg';
}
class field쪽에 탐색 요소 코드 정리
class DrawingBoard {
MODE = 'NONE'; // 브러시 모드 : NONE BRUSH ERASER
IsMouseDown = false; // T/F
eraserColor = '#FFFFFF'; // 지우개 변수
backgroundColor = '#FFFFFF'; // 배경색 변수
IsNavigatorVisible = false; // T/F
undoArray = [];
containerEl;
canvasEl;
toolbarEl;
brushEl;
colorPickerEl;
brushPanelEl;
brushSliderEl;
brushSizePreviewEl;
eraserEl;
navigatorEl;
navigatorImageContainerEl;
navigatorImageEl;
undoEl;
clearEl;
......
}
gif 변환/업로드 에러가 있었지만 어쨌든 completed!!