1
使用KineticJS,我一直在嘗試創建一個只有一個圓形和四個矩形的組,但是單擊後,它會在它們周圍出現矩形(用於選項),並在下一次單擊時隱藏它們。他們已經創建好了(我認爲?),我可以達到我已經選擇矩形的地步,但是我需要使用Rect對象的setVisible()函數。子元素不能識別KineticJS中的函數?
function makePlayer(xPos, yPos) {
var bufferSize = 15;
var player = new Kinetic.Group();
var ball = new Kinetic.Circle({
x: xPos,
y: yPos,
radius: 40,
fill: 'black',
stroke: 'black',
strokeWidth: 1
});
player.add(ball);
ball.setAttr("menuShow", false);
for (var i = 0; i < 4; i++) {
var menuBox = new Kinetic.Rect({
x: ball.getX(),
y: ball.getY(),
width: 50,
height: 50,
visible: false
});
if (i == 0) {
menuBox.setFill('red');
menuBox.setOffset(menuBox.getWidth()/2, ball.getHeight() + bufferSize);
menuBox.on("click tap", function() { alert("red box clicked/tapped") });
} else if (i == 1) {
menuBox.setFill('blue');
menuBox.setOffset(((ball.getWidth()/2) * -1) - bufferSize, menuBox.getHeight()/2);
menuBox.on("click tap", function() { alert("blue box clicked/tapped") });
} else if (i == 2) {
menuBox.setFill('yellow');
menuBox.setOffset(menuBox.getWidth()/2, ((ball.getHeight()/2) * -1) - bufferSize);
menuBox.on("click tap", function() { alert("yellow box clicked/tapped") });
} else if (i == 3) {
menuBox.setFill('white');
menuBox.setOffset(ball.getWidth() + bufferSize, menuBox.getHeight()/2);
menuBox.on("click tap", function() { alert("white box clicked/tapped") });
}
menuBox.setAttr("menu", true);
player.add(menuBox);
}
ball.on("click tap", function() {
var menuPopup = ball.getAttrs();
if (menuPopup.menuShow == false) {
for (var i = 1; i <= 4; i++) {
var menuBox = player.get('Rect');
menuBox.setVisible(true);
}
}
});
圓正常產卵,但每當他們點擊代碼胡扯出來的調用setVisible,如前所述。
這是JavaScript錯誤我得到: 遺漏的類型錯誤:對象[對象對象],[目標對象],[目標對象],[目標對象]有沒有方法 '調用setVisible'
它的工作,它創造了一些意想不到的結果,但它的工作原理。感謝你的回答! – user1804748
你應該接受這個答案,這是正確的。你正在迭代從1到4,並且每次都在你的數組上調用setVisible。嘗試在循環外部移動var menuBox = player.get('Rect'),並按照建議在循環中使用Pre101的片段。 –