1. e-works数字化企业网
  2. 书屋
  3. 书籍列表
  4. HTML5 Canvas核心技术—图形、动画与游戏开发
  5. 在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);

    }

};

系列微信

数字化企业网
PLM之神
e-works制信科技
MES百科
工业自动化洞察
智能制造IM
AI智造圈
智能工厂前线
工业机器人洞察
智造人才圈
工业软件应用
智能制造网博会
ERP之家
供应链指南针
© 2002-2025  武汉制信科技有限公司  版权所有  ICP经营许可证:鄂B2-20030029-1(于2003年首获许可证:鄂B2-20030029)
鄂公网安备:420100003343号 法律声明及隐私权政策     投诉举报电话:027-87592219

关于我们    |    联系我们    |    隐私条款

ICP经营许可证:鄂B2-20080078
(于2003年首获许可证:鄂B2-20030029)
鄂公网安备:420100003343号
© 2002-2025  武汉制信科技有限公司  版权所有
投诉举报电话:027-87592219

扫码查看