javascript - 一次使用多个 Canvas

标签 javascript html canvas crop

我想使用 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>

fiddle :http://jsfiddle.net/soheilyou/54VTh/

最佳答案

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

然后,只需一个接一个地抓取元素 -- 您可以 do with JavaScript或者使用 jQuery 可能更容易(见下文)。

查看 this updated Fiddle或查看此 JavaScript 代码段:

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';
});

关于javascript - 一次使用多个 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788044/

相关文章:

javascript - 当视频帖子进入/退出 ScrollView 时,Facebook 如何处理停止视频帖子?

javascript - 为什么使用 window.setInterval() 后 window.setTimeout() 会变成循环调用

javascript - AJAX 后 $scope.variable 未更改

javascript - jquery设置没有元素的onclick事件

javascript - 在 javascript/typescript 中绘制形状并填充颜色

javascript - HTML5 Canvas 饼图

javascript - mysql查询后 promise 警告

html - 使 div 占用所有剩余空间

wpf - 拉伸(stretch)项目以填充 Canvas

html - 将 2 个 div 放在另一个具有不同边距的 div 中