您现在的位置:e-works > 智造书屋 > 书籍列表 > HTML5 Canvas核心技术—图形、动画与游戏开发 > 在Canvas中使用HTML元素

第一章 基础知识

第八节 在Canvas中使用HTML元素

    程序清单1-10 使用DIV元素来实现橡皮筋式选取框

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

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

    rubberbandDiv =document.getElementById('rubberbandDiv'),

    resetButton =document.getElementById('resetButton'),

    image = new Image(),

    mousedown = {},

    rubberbandRectangle = {},

    dragging = false;

// Functions..........................................................

function rubberbandStart(x, y) {

   mousedown.x = x;

   mousedown.y = y;

   rubberbandRectangle.left = mousedown.x;

   rubberbandRectangle.top = mousedown.y;

   moveRubberbandDiv();

   showRubberbandDiv();

   dragging = true;

}

function rubberbandStretch(x, y) {

   rubberbandRectangle.left = x < mousedown.x ? x: mousedown.x;

   rubberbandRectangle.top  = y < mousedown.y ? y: mousedown.y;

   rubberbandRectangle.width  = Math.abs(x -mousedown.x);

   rubberbandRectangle.height = Math.abs(y -mousedown.y);

   moveRubberbandDiv();

   resizeRubberbandDiv();

}


function rubberbandEnd() {

   var bbox = canvas.getBoundingClientRect();

   try {

     context.drawImage(canvas,

                       rubberbandRectangle.left -bbox.left,

                       rubberbandRectangle.top -bbox.top,

                       rubberbandRectangle.width,

                       rubberbandRectangle.height,

                       0, 0, canvas.width,canvas.height);

   }

   catch (e) {

      // Suppress error message when mouse is released

      // outside the canvas

   }

   resetRubberbandRectangle();

   rubberbandDiv.style.width = 0;

   rubberbandDiv.style.height = 0;

   hideRubberbandDiv();

   dragging = false;

}

function moveRubberbandDiv() {

   rubberbandDiv.style.top  =rubberbandRectangle.top  + 'px';

   rubberbandDiv.style.left =rubberbandRectangle.left + 'px';

}

function resizeRubberbandDiv() {

   rubberbandDiv.style.width  =rubberbandRectangle.width  + 'px';

   rubberbandDiv.style.height =rubberbandRectangle.height + 'px';

}

function showRubberbandDiv() {

   rubberbandDiv.style.display = 'inline';

}

function hideRubberbandDiv() {

   rubberbandDiv.style.display = 'none';

}

function resetRubberbandRectangle() {

   rubberbandRectangle = { top: 0, left: 0, width:0, height: 0 };

}

// Event handlers.....................................................

canvas.onmousedown = function (e) {

   var x = e.clientX,

       y = e.clientY;

   e.preventDefault();

   rubberbandStart(x, y);

};

window.onmousemove = function (e) {

   var x = e.clientX,

       y = e.clientY;

    e.preventDefault();

    if (dragging) {

       rubberbandStretch(x, y);

    }

};