2013-11-30 2 views
3

Я пытаюсь использовать kinetic.js с существующим холстом. Проблема в том, что API kinetic.js требует, чтобы вы указали идентификатор элемента-контейнера, а затем kinetic.js создает Kinetic.Stage (который создает и использует свой собственный холст).Сделать kineticjs использовать существующий холст

Например:

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

    var layer = new Kinetic.Layer(); 

    var rect = new Kinetic.Rect({ 
    x: 239, 
    y: 75, 
    width: 100, 
    height: 50, 
    fill: 'green', 
    stroke: 'black', 
    strokeWidth: 4 
    }); 

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

    // add the layer to the stage 
    stage.add(layer); 
</script> 

Я хочу, чтобы иметь возможность использовать существующий холст элемент с kinetic.js вместо него создать свою собственную. Это возможно?

A similar question был задан вопрос раньше, однако, похоже, он не дает правильного ответа.

Любые идеи? Благодаря!

ответ

1

Холст html - всего лишь куча пикселей.

Вы можете преобразовать эти пиксели в изображение, а затем использовать это изображение в качестве источника для Kinetic.Image.

// create an image from the existing canvas 

var canvas2Image=new Image(); 
canvas2Image.onload=function(){ 

    // create a Kinetic.Image using that image 

    var kImage=new Kinetic.Image({ 
     x:0, 
     y:0, 
     width:canvas2Image.width, 
     height:canvas2Image.height, 
     image:canvas2Image 
    }); 

} 
canvas2Image.src=canvas.toDataURL(); 
+0

Я пытаюсь получить кинетику, чтобы использовать существующий холст в качестве его сцены, а не создавать объект кинетического изображения другого холста. Я хочу, чтобы кинетика была способна применить кинетический слой к холсту, который я создаю, а не к тому, что он делает с помощью экземпляра 'Kinetic.Stage' – Brannon

+0

Понял ... подключение существующего html-холста к Kinetic невозможно - яблоки против апельсинов. Однако «пиксели - это пиксели - ничего больше». Поскольку html canvas - это только пиксели, вы можете использовать эти пиксели, чтобы легко заполнить Kinetic.Image. Если вы делаете что-то динамическое с вашим html-холстом, просто (1) var kImage = Kinetic.Image и всякий раз, когда обновляются холсты html (2) kImage.setImage (canvas2Image). И если вы уже создали «интеллектуальные объекты» для вашего html-холста, ваша задача - переносить эти объекты JS в объекты Kinetic. Ура! – markE

+0

Дополнительная мысль: Kinetic.Shape дает вам пустой холст для работы. Вы можете использовать обычные контекстные команды для рисования на этом холсте. Таким образом, вы можете захватить все, что вы делаете на своем холсте html, и легко сделать то же самое на Kinetic.Shape: http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-shape-tutorial/ (Предупреждение: некоторые ограничения применяются к этому холсту/контексту, который предоставляет Kinetic.Shape. Они в основном полнофункциональные обертки вокруг реального контекста html canvas +. Вы можете получить фактический контекст, используя this.getContext() ._ context; – markE

Смежные вопросы