我正在使用本教程構建可拖動的多邊形。 TutorialKineticJS Uncaught TypeError:更新後無法讀取未定義屬性'x'
現在我想添加文本到它並試圖從kinetic-v3.10.0.js更新到一個新的。 但更新後,我總是得到提到的錯誤信息。
有人可以看看我的代碼,並幫我看看我需要改變什麼,它可能會再次工作?
這裏是我的代碼部分:
建立錨
function buildAnchor(layer, x, y, name) {
var anchor = new Kinetic.Circle({
x: x,
y: y,
radius: 12,
stroke: 'red',
fill: '#ddd',
strokeWidth: 4,
draggable: true,
name : name
});
// add hover styling
anchor.on('mouseover', function() {
document.body.style.cursor = 'pointer';
this.setStrokeWidth(6);
layer.draw();
});
anchor.on('mouseout', function() {
document.body.style.cursor = 'default';
this.setStrokeWidth(4);
layer.draw();
});
layer.add(anchor);
return anchor;}
構建線:
function buildLine(layer, x1, y1, x2, y2, name) {
var line = new Kinetic.Line({
points: [x1, y1, x2, y2],
stroke : '#000',
strokeWidth : 2,
name : name
});
var xDiff = x1 - x2;
var yDiff = y1 - y2;
var text = new Kinetic.Text({
x: 0,
y: 0,
text: 'Test',
fontSize: 20,
fontFamily: 'Calibri',
fill: 'green'
});
if (xDiff < 0 && yDiff == 0) {
line.move(0,-30); //Point a -> b
}
else if (xDiff == 0 && yDiff < 0) {
line.move(30,0); //Point b -> c
}
else if (xDiff > 0 && yDiff == 0) {
line.move(0,30); //Point c -> d
}
else if (xDiff == 0 && yDiff > 0) {
line.move(-30,0); //Point d -> a
}
else if (xDiff < 0 && yDiff < 0) {
line.move(0,-30);
}
else if (xDiff < 0 && yDiff > 0) {
line.move(0,-30);
}
else if (xDiff > 0 && yDiff > 0) {
line.move(-5,30);
}
layer.add(text);
layer.add(line);
return line;
return text;}
構建三角:
function buildTriangle(layer, points, name) {
var triangle = new Kinetic.Polygon({
stroke : '#666',
strokeWidth : 8,
name : name
});
triangle.scaleAnchor = function(anchor, factor) {
anchor.attrs.x = (anchor.attrs.x - this.center.x) * factor + this.center.x;
anchor.attrs.y = (anchor.attrs.y - this.center.y) * factor + this.center.y;
};
triangle.calculateCenter = function() {
this.center.x = (this.a.attrs.x + this.b.attrs.x + this.c.attrs.x)/3;
this.center.y = (this.a.attrs.y + this.b.attrs.y + this.c.attrs.y)/3;
};
triangle.a = buildAnchor(layer, points[0], points[1], 'anchor');
triangle.b = buildAnchor(layer, points[2], points[3], 'anchor');
triangle.c = buildAnchor(layer, points[4], points[5], 'anchor');
line1 = buildLine(layer, points[0], points[1], points[2], points[3], 'line');
line2 = buildLine(layer, points[2], points[3], points[4], points[5], 'line');
line3 = buildLine(layer, points[4], points[5], points[0], points[1], 'line');
triangle.was = { x : 0, y : 0 };
triangle.center = { x : 0, y : 0 };
layer.add(triangle);
return triangle;}
繪製三角形:
function drawtriangle() {
var triangle = this.get('.triangle')[0];
triangle.setPoints([ triangle.a.attrs.x - triangle.was.x,
triangle.a.attrs.y - triangle.was.y,
triangle.b.attrs.x - triangle.was.x,
triangle.b.attrs.y - triangle.was.y,
triangle.c.attrs.x - triangle.was.x,
triangle.c.attrs.y - triangle.was.y ]);
line1.setPoints([triangle.a.attrs.x - triangle.was.x, triangle.a.attrs.y - triangle.was.y, triangle.b.attrs.x - triangle.was.x, triangle.b.attrs.y - triangle.was.y]);
line2.setPoints([triangle.b.attrs.x - triangle.was.x, triangle.b.attrs.y - triangle.was.y, triangle.c.attrs.x - triangle.was.x, triangle.c.attrs.y - triangle.was.y]);
line3.setPoints([triangle.c.attrs.x - triangle.was.x, triangle.c.attrs.y - triangle.was.y, triangle.a.attrs.x - triangle.was.x, triangle.a.attrs.y - triangle.was.y]);
triangle.calculateCenter.apply(triangle);}
這裏是整個代碼的jsfiddle: jsfiddle.net/GByKu/1/ – 2013-02-24 15:02:09
你什麼時候收到錯誤信息?我不明白。你在jsFiddle中使用kinetic-v3.10.0.js。這是否是正確的版本來重現您的問題? – 2013-02-24 15:23:04
當我嘗試切換到更新的版本(例如kinetic-v4.3.2.js)時,爲了實現文本功能,我得到錯誤,並且畫布中不顯示任何內容。我的例子jsfiddle顯示了它應該如何工作。 – 2013-02-24 15:30:15