使用 kineticjs 拖放 canvas 对象

Make drag and drop canvas object using kineticjs

我在工具栏中有多个 canvas 对象。我想将拖放功能添加到 canvas 对象,例如 fiddle。我该怎么做?

JS代码

  $(function(){   
   var stage = new Kinetic.Stage({
        container: 'toolbar',
        width: 350px,
        height: 350px
   });
  var layer = new Kinetic.Layer();
  stage.add(layer);
  var line = new Kinetic.Shape({
      x:0,
      y:0,
      stroke:"blue",
      fill: 'black',
      drawFunc: function(context) {
        context.beginPath();
        context.moveTo(20,5);
        context.quadraticCurveTo(10, 35, 20, 60);
        context.moveTo(20,5);
        context.quadraticCurveTo(30, 35, 20, 60);
        context.fillStrokeShape(this);
      }
    });
    var line2 = new Kinetic.Rect({
        x: 60,
        y: 8,
        width: 40,
        height: 40,
        fill: "red",        
    });     
    layer.add(line);
    layer.add(line2);
    layer.draw();
 });

Canvas 内容无法从 canvas 元素中拖出。

因此,如果您的顶部工具栏是一个包含 canvas 个形状的 canvas,则这些形状无法从工具栏拖到下面的第二个 canvas 上。

几个解决方法:

  1. 不要使用工具栏 div 和 canvas 拖放区,而是制作 1 canvas 来同时绘制工具栏和拖放区。这样您就可以将内容从 canvas 的顶部(工具栏所在的位置)拖动到 canvas 的底部(放置区所在的位置)。

  2. 将您的每个形状变成图像。您可以通过以下方式做到这一点:

    • 正在 canvas 元素上绘制 1 个形状。
    • 使用context.getDataURL获取canvas的dataURL。
    • 使用 dataURL 作为源创建一个新的 Image() 对象。
    • 将新创建的形状图像放入您的工具栏。
    • 对每个其他形状重复。

祝你项目顺利!