Kinetic JS - 在画布上加载多个图像

时间:2014-02-23 21:02:07

标签: javascript jquery html5 kineticjs

我想在画布上加载和显示多个图像。图像源保存在一个数组中:

var sources = {"../src/img/IMG_1284.JPG", "../src/img/IMG_1285.JPG", "../src/img/IMG_1286.JPG", "../src/img/IMG_1287.JPG", "../src/img/IMG_1288.JPG"}

我找到了这个教程:http://www.html5canvastutorials.com/tutorials/html5-canvas-image-loader

但我不知道如何将此代码改编为我的sources数组。 另外,我想设置每个可拖动的图像,但我认为使用context.drawImage(..)是不可能的。

希望我的问题是可以理解的。谢谢你的帮助...

1 个答案:

答案 0 :(得分:4)

我看到你用KineticJS标记了你的问题。

KineticJS通过跟踪您的图像使您的任务变得简单,并允许您的用户拖动它们。

简单如下:

  • 使用图像加载程序确保在尝试绘制之前所有图像都已完全加载
  • 加载后,使用每个图像创建一个Kinetic.Image。
  • 将可拖动属性放在Kinetic.Image上,它将自动拖动

这是代码和演示:http://jsfiddle.net/m1erickson/3es4Z/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Prototype</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.2.min.js"></script>
<style>
body{padding:20px;}
#container{
  border:solid 1px #ccc;
  margin-top: 10px;
  width:350px;
  height:350px;
}
</style>        
<script>
$(function(){

    // create the Kinetic stage and layer
    var stage = new Kinetic.Stage({
        container: 'container',
        width: 350,
        height: 350
    });
    var layer = new Kinetic.Layer();
    stage.add(layer);

    // put the paths to your images in imageURLs
    var imageURLs=[];
    imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-1.jpg");
    imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-2.jpg");
    imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-3.jpg");
    var imagesOK=0;
    var imgs=[];

    // fully load every image, then call the start function
    loadAllImages(start);

    function loadAllImages(callback){
        for (var i=0; i<imageURLs.length; i++) {
            var img = new Image();
            imgs.push(img);
            img.onload = function(){ 
                imagesOK++; 
                if (imagesOK>=imageURLs.length ) {
                    callback();
                }
            };
            img.onerror=function(){alert("image load failed");} 
            img.crossOrigin="anonymous";
            img.src = imageURLs[i];
        }      
    }

    function start(){
        // the imgs[] array holds fully loaded images
        // the imgs[] are in the same order as imageURLs[]

        // make each image into a draggable Kinetic.Image
        for(var i=0;i<imgs.length;i++){
            var img=new Kinetic.Image({
                x:i*75+15,
                y:i*75+15,
                width:60,
                height:60,
                image:imgs[i],
                draggable:true
            });
            layer.add(img);
        }
        layer.draw();
    }

}); // end $(function(){});
</script>       
</head>
<body>
    <button id="myButton">Button</button>
    <div id="container"></div>
</body>
</html>