【问题标题】:Using Several Canvases at Once一次使用多个画布
【发布时间】:2014-09-07 09:50:32
【问题描述】:

我想使用 HTML5 的 canvas 标记和 JavaScript 裁剪页面中的多个图像。问题是页面只显示了一张图片。

我该怎么办?我试过的代码如下:

<canvas id="myCanvas" width="300" height="300"></canvas>
<canvas id="myCanvas" width="300" height="300"></canvas>
<canvas id="myCanvas" width="300" height="300"></canvas>
<script>
  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');
  var imageObj = new Image();

  imageObj.onload = function() {
    // draw cropped image
    var sourceX = 0;
    var sourceY = 0;
    var sourceWidth = 200;
    var sourceHeight = 150;
    var destWidth = sourceWidth;
    var destHeight = sourceHeight;
    var destX = canvas.width / 2 - destWidth / 2;
    var destY = canvas.height / 2 - destHeight / 2;

    context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
  };

imageObj.src ='http://static.adzerk.net/Advertisers/3478c54721cd466fb6f7d3afe16e97d4.gif';

</script>

小提琴:http://jsfiddle.net/soheilyou/54VTh/

【问题讨论】:

  • ID 的意义在于它对 one 元素是唯一的。您可能想进一步研究。所以我建议你研究学习 HTML。除此之外,您还需要获取每个画布的上下文,并在每个画布上进行绘制。
  • 你必须分别对待每个画布,使用唯一的 id,否则使用一个类并对它们执行增量操作。

标签: javascript html canvas crop


【解决方案1】:

正如Some Guy 所说,您对每个画布都使用相同的id - 这是一个禁忌。尝试给每个人一个唯一的id 或改用一个类。

然后,只需要一个一个地抓取元素——你可以do with JavaScript 或者使用 jQuery(下图)更容易。

查看this updated Fiddle 或查看此 JavaScript sn-p:

var canvases = $('.myCanvas');
$(canvases).each(function () {
    var canvas = $(this).get(0); //Grab the canvas node from the jQuery container.
    var context = canvas.getContext('2d');
    var imageObj = new Image();

    imageObj.onload = function () {
        var sourceX = 0;
        var sourceY = 0;
        var sourceWidth = 200;
        var sourceHeight = 150;
        var destWidth = sourceWidth;
        var destHeight = sourceHeight;
        var destX = canvas.width / 2 - destWidth / 2;
        var destY = canvas.height / 2 - destHeight / 2;

        context.drawImage(imageObj, sourceX, sourceY, 
                          sourceWidth, sourceHeight, destX, 
                          destY, destWidth, destHeight);
    };

    imageObj.src = 'path/to/your/image.png';
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多