【问题标题】:How to drag a canvas with helper 'clone'?如何使用助手“克隆”拖动画布?
【发布时间】:2013-09-26 22:26:12
【问题描述】:

我有一个简单的 HTML 画布

<div class='circle'>
  <canvas id="myCanvas" width="100" height="100">Your browser does not support the HTML5 canvas tag.</canvas>
</div>

有风格

.circle {
  height: auto;
  width: auto;
}

和脚本

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.arc(50, 50, 50, 0, 2 * Math.PI);
ctx.fill();

$('.circle').draggable({
    helper: 'clone' // Remove this line to make it draggable
});

似乎我不能使用辅助选项,当我拖动它时,我想在原始位置保留一个圆圈的副本。只有当我删除辅助选项时,可拖动的才会起作用。这仅发生在画布上,如果我使用 css 绘制圆圈则不会。小提琴是here。谢谢!

【问题讨论】:

    标签: javascript jquery css canvas jquery-ui-draggable


    【解决方案1】:

    不幸的是,当您克隆画布元素时,它不会复制图像数据。您可能希望将画布数据导出为数据 url 并克隆图像。

    小提琴:http://jsfiddle.net/gwwar/Bdpq9/2/

    <div class='circle'>
    </div>
    
    var c = document.createElement("canvas");
    var ctx = c.getContext("2d");
    ctx.beginPath();
    ctx.arc(50, 50, 50, 0, 2 * Math.PI);
    ctx.fill();
    var url = c.toDataURL();
    var img = document.createElement("img");
    img.setAttribute("src",url);
    $(".circle").append(img);
    
    $('.circle').draggable({
        helper: 'clone' // Remove this line to make it draggable
    });
    

    【讨论】:

    • 现在看起来工作正常。我需要更多地玩它,谢谢!
    【解决方案2】:

    那是因为克隆只克隆画布元素,而不是它的内容(画布在这方面是一个特殊的元素)。您可以通过marking the canvas 看到这方面的证据。

    您需要将原始画布中的内容重新绘制到克隆的实例上:

    /// you need to get these objects in advance, then:
    clonedContext.drawImage(originalCanvas, 0, 0);
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2011-07-15
      • 2010-10-30
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多