위토즈 - 개발자프로그램판매공간

정보공유

[HTML5] canvas 사각툴 크키 조정 예제

 

 

var canvas = document.getElementById('canvas'),

    ctx = canvas.getContext('2d'),

    rect = {},

    drag = false,

    mouseX,

    mouseY,

    closeEnough = 10,

    dragTL = dragBL = dragTR = dragBR = false;

 

function init() {

    canvas.addEventListener('mousedown', mouseDown, false);

    canvas.addEventListener('mouseup', mouseUp, false);

    canvas.addEventListener('mousemove', mouseMove, false);

 

    rect = {

        startX: 100,

        startY: 200,

        w: 300,

        h: 200

    }

}

 

function mouseDown(e) {

    mouseX = e.pageX - this.offsetLeft;

    mouseY = e.pageY - this.offsetTop;

 

    // if there isn't a rect yet

    if (rect.w === undefined) {

        rect.startX = mouseY;

        rect.startY = mouseX;

        dragBR = true;

    }

 

    // if there is, check which corner

    //   (if any) was clicked

    //

    // 4 cases:

    // 1. top left

    else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY)) {

        dragTL = true;

    }

    // 2. top right

    else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY)) {

        dragTR = true;

 

    }

    // 3. bottom left

    else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY + rect.h)) {

        dragBL = true;

 

    }

    // 4. bottom right

    else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY + rect.h)) {

        dragBR = true;

 

    }

    // (5.) none of them

    else {

        // handle not resizing

    }

 

    ctx.clearRect(0, 0, canvas.width, canvas.height);

    draw();

 

}

 

function checkCloseEnough(p1, p2) {

    return Math.abs(p1 - p2) < closeEnough;

}

 

function mouseUp() {

    dragTL = dragTR = dragBL = dragBR = false;

}

 

function mouseMove(e) {

    mouseX = e.pageX - this.offsetLeft;

    mouseY = e.pageY - this.offsetTop;

    if (dragTL) {

        rect.w += rect.startX - mouseX;

        rect.h += rect.startY - mouseY;

        rect.startX = mouseX;

        rect.startY = mouseY;

    } else if (dragTR) {

        rect.w = Math.abs(rect.startX - mouseX);

        rect.h += rect.startY - mouseY;

        rect.startY = mouseY;

    } else if (dragBL) {

        rect.w += rect.startX - mouseX;

        rect.h = Math.abs(rect.startY - mouseY);

        rect.startX = mouseX;

    } else if (dragBR) {

        rect.w = Math.abs(rect.startX - mouseX);

        rect.h = Math.abs(rect.startY - mouseY);

    }

    ctx.clearRect(0, 0, canvas.width, canvas.height);

    draw();

}

 

function draw() {

    ctx.fillStyle = "#222222";

    ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);

    drawHandles();

}

 

function drawCircle(x, y, radius) {

    ctx.fillStyle = "#FF0000";

    ctx.beginPath();

    ctx.arc(x, y, radius, 0, 2 * Math.PI);

    ctx.fill();

}

 

function drawHandles() {

    drawCircle(rect.startX, rect.startY, closeEnough);

    drawCircle(rect.startX + rect.w, rect.startY, closeEnough);

    drawCircle(rect.startX + rect.w, rect.startY + rect.h, closeEnough);

    drawCircle(rect.startX, rect.startY + rect.h, closeEnough);

}

 

init();

 

 

정보공유
Total 443건 15 페이지
번호 제목 글쓴이 날짜 조회
233 반응형 테이블 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-15 39393
232 첨부파일 이미지파일만 등록하게 하기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-07 34685
231 스마트 에디터 반응형에서 가로사이즈 맞게 출력시키기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-04 44370
230 부트스트랩 슬라이더 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-01 48154
열람중 canvas 사각툴 크키 조정 예제 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-01 26919
228 부트스트랩 모달창 닫기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-01 37451
227 구글+ 로그인 API 키 받기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-25 50266
226 페이스북 로그인 API 키 받기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-25 45689
225 Google 지도가 제대로 로드되지 않았습니다 - 구글 맵 키 받기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-25 55614
224 인스타그램 API 키 받기 (3) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-24 33374
223 인스타그램 API 키 받기 (2) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-24 31346
222 인스타그램 API 키 받기 (1) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-24 51892
221 코딩 교육 사이트 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-21 46009
220 get_magic_quotes_gpc 가 on 으로 되어있는경우 해결법. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-21 35743
219 VR 동영상 업로드 사이트 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-20 46755