javascript - 了解在 Kinetic.JS 中放置图像?

标签 javascript image canvas kineticjs

下面是我正在处理的作业的一些代码。在没有学习 JavaScript 基础的情况下被安排参加第二年类(class),我有点墨守成规。

我正在尝试放置三个图像,并能够稍后使用函数来调用它们来更改其不透明度。

当我放置图像时,一次似乎只有一个图像想要出现,当我调用它们时,我被告知它们不存在。

// Create the canvas based on the existing div for it in the HTML file

var stage = new Kinetic.Stage
({
    container: 'canvasContainer',
    width: 600,
    height: 600
});

  /* /////////////////////////////////////////////////////
    C O D E   F O R   L O A D I N G   U P   I M A G E S
  ///////////////////////////////////////////////////// */

    var characters = new Kinetic.Layer();
    stage.add(characters);

    window.onload = function()
    {

        var majoraCharacter = new Image();

        majoraCharacter.src ="https://upload.wikimedia.org/wikipedia/commons/3/34/Red_star.svg"

        majoraCharacter.onload = function()
        {
        character1= new Kinetic.Image({ x: 400, y: 300, width: 150, height: 150, offset: {x: 75, y: 75}, image: majoraCharacter});
        characters.add(character1);
        characters.draw();
        }

    }

    window.onload = function()
    {

        var amaterasuCharacter = new Image();

        amaterasuCharacter.src ="https://upload.wikimedia.org/wikipedia/commons/3/34/Red_star.svg"

        amaterasuCharacter.onload = function()
        {
        character2= new Kinetic.Image({ x: 400, y: 200, width: 150, height: 150, offset: {x: 75, y: 75}, opacity:0.5, image: amaterasuCharacter});
        characters.add(character2);
        characters.draw();
        }

    }

    window.onload = function()
    {

        var toothlessCharacter = new Image();

        toothlessCharacter.src ="https://upload.wikimedia.org/wikipedia/commons/3/34/Red_star.svg"

        toothlessCharacter.onload = function()
        {
        character3= new Kinetic.Image({ x: 400, y: 100, width: 150, height: 150, offset: {x: 75, y: 75}, image: toothlessCharacter});
        characters.add(character3);
        characters.draw();
        }

    }



  /* /////////////////////////////////////////////////////
          C A N V A S   F U N C T I O N A L I T Y
  ///////////////////////////////////////////////////// */

      // Create new layer for background images

      // Create layer for character images

      var character = new Kinetic.Layer();

      var rect = new Kinetic.Rect({
        x: 100,
        y: 100,
        width: 150,
        height: 150,
        fill: 'grey',
        strokeWidth: 4,
        offset: {x: 75, y: 75},
      });

      // add the shape to the layer
      character.add(rect);

      // add the layer to the stage
      stage.add(character);

有没有办法可以更好地将图像添加到 Canvas ?

是什么阻止它们共存以及在其加载功能之外进行编辑?

非常感谢任何及所有答案!

最佳答案

演示:http://jsfiddle.net/m1erickson/Bf88D/

一些 KineticJS 基础知识:

  • KineticJS 从一个阶段开始。
  • 舞台是添加到舞台的一个或多个层的容器
  • 每一层实际上都是一个 Canvas
  • 将形状(包括图像)添加到图层中。

由于您是 JavaScript 新手,因此这里概述了如何构建您的项目

  • 只需使用一个 window.onload 并将所有 javascript 放入该一个 window.onload
  • 提前加载所有图像,以便可以在 Canvas 上绘制
  • 加载所有图像后,然后从中创建 Kinetic.Image 对象。

这是一个图像加载器,它会提前加载所有图像,然后在图像完全加载时调用 start 函数。

// image loader

var imageURLs=[];  // put the paths to your images here
var imagesOK=0;
var imgs=[];
imageURLs.push("");
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[]
    // use the images now!
}

加载所有图像后,您可以使用此可重用功能在图层上添加动态图像。

  • 您发送一张预先加载的图像。
  • 您还可以发送您想要放置图像的 x,y 位置。
  • 您还可以发送您想要调整图像大小的宽度和高度。

此函数向图层添加一张新图像

function addKineticImage(image,x,y,w,h){
    var image = new Kinetic.Image({
        x:x,
        y:y,
        width:w,
        height:h,
        image:image,
        draggable: true
    });
    layer.add(image);
    layer.draw();
}

关于javascript - 了解在 Kinetic.JS 中放置图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207850/

相关文章:

javascript - SVG 标签转换为 PNG 图片并下载

c# - 从代码隐藏到 javascript 获取 ASP 页面中的文件路径

javascript - SVG/CSS 问题,嵌入或引用文件

CSS : img border and text decoration

javascript - 无法在 aptana studio 中运行 "canvas"标记和 javascript 程序

javascript - 将带有文件输入的多个图像上传到 Canvas 元素

javascript - 如何在下拉菜单下创建下拉菜单

javascript - 如何重定向修改 header ?

javascript - 如何仅在新图像实际可用时才刷新图像源?

iphone - 从应用程序包加载图像的最佳方式