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

第一章 基础知识

第八节 在Canvas中使用HTML元素

window.onmouseup = function (e) {

   e.preventDefault();

   rubberbandEnd();

};

image.onload = function () {

   context.drawImage(image, 0, 0, canvas.width,canvas.height);

};

resetButton.onclick = function(e) {

   context.clearRect(0, 0, context.canvas.width,

                           context.canvas.height);

   context.drawImage(image, 0, 0, canvas.width,canvas.height);

};


//Initialization.....................................................

image.src = 'curved-road.png';

    在这段代码中,我们又一次超前地使用了drawImage()方法同时对图像进行了绘制与缩放。本书4.1节将会详细研究这个方法,同时我们还会学习另外一种实现该效果的办法,那就是通过直接修改图像的像素来绘制橡皮筋式选取框。

    然而,现在我们要关注的还是用于实现橡皮筋式选取框的DIV元素,以及这段代码是如何在用户拖动鼠标时修改该元素大小的。

    canvas的onmousedown事件处理器在被触发时会调用rubberbandStart()方法,该方法会将DIV元素的左上角移动到鼠标按下的地点,并使DIV元素可见。由于代表橡皮筋式选取框的这个DIV元素,其CSS中的position值是absolute,所以在指定其左上角坐标时,必须指定相对于窗口的坐标,而不是相对于canvas的坐标。

    如果用户拖动鼠标,那么onmousemove事件处理器就会调用rubberbandStretch()方法,该方法会对代表橡皮筋式选取框的这个DIV元素进行移动与缩放操作。

    当用户松开鼠标的时候,onmouseup事件处理器就会调用rubberbandEnd()方法,该方法会把选中的那部分图像放大,并绘制出来,同时将表示橡皮筋式选取框的那个DIV元素隐藏起来。

    最后,请注意,以上三个鼠标事件处理器都会在传入的事件对象上调用preventDefault()方法。就像在1.6.1小节中讨论的那样,调用该方法可以防止浏览器对鼠标事件做出响应。如果你将preventDefault()方法的调用移除,那么浏览器就会试着选中网页上的元素,要是用户在拖动时将鼠标移出了canvas的范围,那么就会产生不好的效果。