我使用shape
从group
中选择id
时遇到问题。这是我的代码:http://codepen.io/drixta/pen/AInHL
这是我创建广场的代码:
function create_square(posr,posc,state,len){
var square = new Kinetic.Rect({
id : "sqr"+ posr + "," + posc,
posr: posr,
posc: posc,
state : state,
x: posr*len,
y: posc*len,
width: len,
height: len,
stroke: 'black',
strokeWidth: 2,
fill: 'white'
});
console.log(square.attrs.id);
squareGroup.add(square);
}
从这里一切正常。控制台会打印出每个方格的ID。
sqr0,0 javascript.js:44
sqr0,1 javascript.js:44
sqr0,2 javascript.js:44
sqr0,3 javascript.js:44
sqr0,4 javascript.js:44
sqr0,5 javascript.js:44
sqr0,6 javascript.js:44
sqr0,7 javascript.js:44
但是,根据此网站:http://www.html5canvastutorials.com/kineticjs/html5-canvas-select-shape-by-id-with-kineticjs/
我尝试在程序结束时使用console.log((squareGroup.get('#sqr0,0')[0]).attrs.id)
,它说cannot get attrs of undefined
。假设这不起作用。
非常感谢!
PS:这是突出显示框的代码:
square.on("mouseover", function(){
square.setFill('blue');
layer.draw();
});
square.on("mouseout", function(){
square.setFill('white');
layer.draw();
});
我将它嵌入到create_square函数中,当盒子数量增加时,它非常缓慢且无响应,是否有人知道我可以做得更好?
答案 0 :(得分:0)
您的示例在Chrome上没有任何问题,效果很好。
提高性能。 问题在这里:
square.on("mouseover", function(){
square.setFill('blue');
layer.draw();
});
square.on("mouseout", function(){
square.setFill('white');
layer.draw();
});
你两次调用layer.draw() - 它很慢。你可以这样做:
square.on("mouseover", function(){
square.setFill('blue');
});
square.on("mouseout", function(){
square.setFill('white');
setTimeout(function(){layer.draw();});
});