当前位置: 首页 > 文档资料 > HTML5 Canvas 实战 >

6.7 拖放图像

优质
小牛编辑
129浏览
2023-12-01

本节实质上是结合前两节的概念,来演示如何拖放一副图像。

操作步骤

按照以下步骤,来拖放一副图像:

1.链接到Events类:

<script src="events.js">
</script>

2. 定义writeMessage()函数,该函数输出一条消息:

<script>
function writeMessage(context, message){
  context.font  = "18pt Calibri";
  context.fillStyle  = "black";
  context.fillText(message,  10,  25);
}

3. 定义drawImage()函数,该函数实例化一个Events对象,并设置用来覆盖图像的矩形区域的初始位置:

function drawImage(challengerImg){
  var events  = new Events("myCanvas");
  var canvas  = events.getCanvas();
  var context  = events.getContext();
  var rectX  = canvas.width  /  2  - challengerImg.width  /  2;
  var rectY  = canvas.height  /  2  - challengerImg.height  /  2;
  var draggingRect  = false;
  var draggingRectOffsetX  =  0;
  var draggingRectOffsetY  =  0;

4. 定义stage,如果布尔变量draggingRect的值为true,该函数首先根据鼠标的坐标来设置图像的坐标:

events.setStage(function(){
  var mousePos  = this.getMousePos();
  if  (draggingRect)  {
  rectX  = mousePos.x  - draggingRectOffsetX;
    rectY  = mousePos.y  - draggingRectOffsetY;
}

5. 清除画布,并输出一条消息:

//清除画布
  this.clear();
  writeMessage(context, "Drag and drop the car...");

6. 开始一个新区域,绘制图像,绘制矩形区域来定义图像路径,附加事件监听器,并关闭路径:

  this.beginRegion();
  context.drawImage(challengerImg, rectX, rectY, challengerImg.width, challengerImg.height);
  
  //为图像绘制矩形区域
  context.beginPath();
  context.rect(rectX, rectY, challengerImg.width, challengerImg.height);
  context.closePath();
  
  this.addRegionEventListener("mousedown", function(){
    draggingRect  = true;
    var mousePos  = events.getMousePos();
    draggingRectOffsetX  = mousePos.x  - rectX;
    draggingRectOffsetY  = mousePos.y  - rectY;
  });
  
  this.addRegionEventListener("mouseup", function(){
      draggingRect  = false;
  });
  
  this.addRegionEventListener("mouseover", function(){
      document.body.style.cursor  = "pointer";
  });
  
  this.addRegionEventListener("mouseout", function(){
      document.body.style.cursor  = "default";
  });
  
  this.closeRegion();
});
}

7. 页面加载完成后,加载图像,并调用drawImage()函数:

 window.onload  = function(){
  //加载图像
  challengerImg  = new Image();
  challengerImg.onload  = function(){
      drawImage(this);
  };
  challengerImg.src  = "challenger.jpg";
};
</script>

8. 在HTML文档的body部分嵌入canvas标签:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;">
</canvas>

工作原理

要拖放图像,我们可以在图像上绘制一个不可见的矩形路径,来为图像提供路径,并为路径附加mousedown, mouseup, 和 mousemove事件,方法跟上一节类似的方法来处理拖放的三个阶段。

当用户拖放图像时,实际上他/他同时拖放了图像和相应的矩形路径。

  • 第3章 绘制图像
  • 拖放图形