如何使KineticJs定制形状

时间:2013-03-06 19:43:47

标签: html5 kineticjs shape

我正在努力使KineticJs html 5自定义形状。

但它不适用于Google Chrome。在Firefox中不可拖动,并且形状的大小也不相同。

任何人都可以说出原因吗?

实时代码http://jsfiddle.net/prantor19/wGE2a/8/

var stage = new Kinetic.Stage({
    container: 'canvas-container',
    width: 500,
    height: 500,
});

var layer = new Kinetic.Layer();

drawWindow = function(canvas) {
    var context = canvas.getContext();
    context.beginPath();
    context.moveTo(this.attrs.x,this.attrs.y);
    context.lineTo(this.attrs.width,this.attrs.y);
    context.lineTo(this.attrs.width,this.attrs.height);
    context.lineTo(this.attrs.x,this.attrs.height);
    context.closePath();
    context.clip();
    context.drawImage(img,this.attrs.img_x,this.attrs.img_y);
}

img = document.createElement('img');
img.src= "http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Nature_reserve_Kladrubska_hora_in_summer_2011_(17).JPG/1024px-Nature_reserve_Kladrubska_hora_in_summer_2011_(17).JPG";

var window1 = new Kinetic.Shape({
    drawFunc: drawWindow,
    x: 0,
    y: 0,
    width: 100,
    height: 100,
    img:img,
    img_x:0,
    img_y:0,
    draggable: true
});

var window2 = new Kinetic.Shape({
    drawFunc: drawWindow,
    x: 10,
    y: 60,
    width: 100,
    height: 100,
    img:img,
    img_x:-250,
    img_y:0,
    draggable: true
});

pointercursor = function() {
    document.body.style.cursor = 'pointer';
}
defaultCursor = function() {
    document.body.style.cursor = 'default';
}

window1.on('mouseover',pointercursor );
window1.on('mouseout', defaultCursor);
window2.on('mouseover',pointercursor );
window2.on('mouseout', defaultCursor);

layer.add(window1);
layer.add(window2);

stage.add(layer);

2 个答案:

答案 0 :(得分:1)

您的脚本中有错误

  

无法从画布获取图像数据,因为画布已被跨源数据污染。动能V4.3.2-beta.js:4365   未捕获的错误:SecurityError:DOM Exception 18

Chrome拒绝使用cavas上的跨域图片。

对于拖动,您需要为形状添加此设置描边

stroke: 'black',

并在drawFunc结束时

canvas.fillStroke(this);

这是我的工作版本

http://jsfiddle.net/W7SGT/

答案 1 :(得分:1)

在KienticJS中绘制自定义形状时,您应该使用画布渲染器,否则它无法处理形状上的事件。这是一个关于自定义形状的教程:

http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-shape-tutorial/

您还可以查看Kinetic.Image形状,了解它如何处理图像:

https://github.com/ericdrowell/KineticJS/blob/master/src/shapes/Image.js