【问题标题】:Draggables and resizables elements in inside HTML5 canvasHTML5 画布中的可拖动和可调整大小的元素
【发布时间】:2012-08-02 09:01:54
【问题描述】:

是否可以使 HTML5 Canvas 元素中的元素可拖动和调整大小。有什么办法可以让下面代码中的动态图片可以移动:

var ctx, imgArray;

function initAll() {
    ctx = document.getElementById("canvas").getContext("2d");
    imgArray = ["http://i46.tinypic.com/nqe1dt.jpg", 
                    "http://i50.tinypic.com/i21phi.jpg", 
                    "http://i49.tinypic.com/1zmfcrq.jpg", 
                    "http://i50.tinypic.com/v8g6mo.jpg", 
                    "http://i49.tinypic.com/21kh7ah.jpg"];
    drawCanvas();
    document.getElementById("checkgroup").onchange = drawCanvas;
}

function drawCanvas() {
   ctx.clearRect(0, 0, 600, 400);
   for(var i=0; i < imgArray.length; ++i) {
      var img = new Image();
      img.posX = (i < 3) ? i*200 : (i-2.5)*200;
      img.posY = (i < 3) ? 0 : 200;
      img.src = imgArray[i];
      img.onload = function() {
        ctx.drawImage(this, this.posX, this.posY, 150, 150);
      } 
   }
}
window.onload = initAll;

该项目位于 JSBin:http://jsbin.com/welcome/7209/edit

【问题讨论】:

  • 我认为它会相当复杂。要是有一个简单的方法就好了......

标签: javascript drag-and-drop html5-canvas


【解决方案1】:

使用为画布提供形状对象支持的 KineticJS。

KineticJS 会为其形状提供鼠标事件,因此您可以更轻松地实现类似拖动的功能:

http://www.html5canvastutorials.com/kineticjs/html5-canvas-drag-and-drop-tutorial/

【讨论】:

  • 是否可以改用easeljs。我发现它工作得更好。此外,它使用了一个真实的画布对象,而不是 kineticjs 中的容器 div。
  • canvas 本身只是一个像素缓冲区,您需要以某种方式提供形状跟踪。您可以手动完成(大约 10k 行代码)或只使用 KineticJS 之类的 div 垫片。我不知道 EaselJS 并且在原始问题中没有提到它。
猜你喜欢
  • 2012-01-31
  • 1970-01-01
  • 2023-03-10
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多