jquery - 如何在 jQuery 中创建 Canvas 并在多个区域中显示

标签 jquery html canvas

为什么如果我尝试使用 .html() 在 dom 的多个区域中显示相同的 canvas 元素,只会输出最后一个。看一下下面的示例,我创建一个 canvas 元素并将其存储在一个变量中,以便使用 .html() 输出到两个 dom 元素,但第一个元素是空白的。为什么会发生这种情况?

jQuery(document).ready(function(){
    var c = $('<canvas />');
    c[0].height = 200;
    c[0].width = 200;
    var ctx = c[0].getContext("2d");
    ctx.beginPath();
    ctx.arc(95, 50, 40, 0, 2 * Math.PI);
    ctx.stroke();

    $('.canvas_one').html(c);
    $('.canvas_two').html(c);
});
.canvas_one{
    background-color: blue;
    min-height: 10px;
}

.canvas_two{
    background-color: red;
    min-height: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="canvas_one"></div>
<div class="canvas_two"></div>

最佳答案

问题是因为 c 只引用同一个、单个 canvas 实例。因此,当您将其包含在第二个 html() 调用中时,您实际上将其从原始位置移动到目标。

如果您想创建一个新的 canvas 实例,那么您可以使用 clone() 来创建它,如下所示:

$('.canvas_two').html(c.clone());

jQuery(document).ready(function() {
  var c = $('<canvas />');
  c[0].height = 200;
  c[0].width = 200;
  var ctx = c[0].getContext("2d");
  ctx.beginPath();
  ctx.arc(95, 50, 40, 0, 2 * Math.PI);
  ctx.stroke();

  $('.canvas_one').html(c);
  $('.canvas_two').html(c.clone());
});
.canvas_one {
  background-color: blue;
  min-height: 10px;
}

.canvas_two {
  background-color: red;
  min-height: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="canvas_one"></div>
<div class="canvas_two"></div>

关于jquery - 如何在 jQuery 中创建 Canvas 并在多个区域中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60075234/

相关文章:

javascript - 在 javascript 中向 CanvasRenderingContext2D 添加标记

javascript - 从位图中获取像素

javascript - JS 复选框启用/禁用输入

html - 导航栏不会在智能手机设备上居中

html - jekyll 帖子和页面中的首字母和单词

html - 在新选项卡中打开链接而不单击链接

javascript - 如何将另一个 Matrix 雨代码动画添加到我的 Canvas 动画中?

javascript - 如何获取动态追加复选框列表中的值

javascript - 组件按钮最初显示 'n' 个 div 元素,然后显示 'n' 个更多元素

javascript - 如何单击页面上的坐标?