Javascript 如何在kinetic.js中选择对象?
我试图设计一个编辑器,可以用来绘制形状使用块,使用框架。到目前为止一切都很好。我可以添加矩形,改变其大小,并旋转它。但我所说的只适用于最后创建的对象。我无法选择其中一个进行修改。下面是代码的html:Javascript 如何在kinetic.js中选择对象?,javascript,html,html5-canvas,kineticjs,Javascript,Html,Html5 Canvas,Kineticjs,我试图设计一个编辑器,可以用来绘制形状使用块,使用框架。到目前为止一切都很好。我可以添加矩形,改变其大小,并旋转它。但我所说的只适用于最后创建的对象。我无法选择其中一个进行修改。下面是代码的html: <style> body { margin: 0px; padding: 0px; } canvas { border: 1px solid #9C9898; } </
<style>
body {
margin: 0px;
padding: 0px;
}
canvas {
border: 1px solid #9C9898;
}
</style>
</head>
<body>
<table width="800" border="0">
<tr>
<td colspan="2" style="background-color:#eeeeee;">
</td>
</tr>
<tr>
<td style="background-color:#eeeeee;height:200px;width:400px;">
<button id="rect">Rectangle</button><br>
<button id="small">Small</button><br>
<button id="big">Big</button><br>
<button id="rotate">RotateRight</button><br>
<button id="rotate2">RotateLeft</button><br>
<button id="delete">Delete</button><br>
</td>
<td>
<div id="container"></div>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.0-beta2.js"></script>
<script type="text/javascript" src="example_kinetic.js"></script>
</td>
</tr>
<tr>
<td colspan="2" style="background-color:#eeeeee;text-align:center;">
Copyright © ceng314animation.wordpress.com/</td>
</tr>
</table>
</body>
</html>
单击某个矩形时,需要将其设置为活动矩形。使用myrect作为当前活动矩形的变量
对您的代码进行以下更改,标识为//看起来@jing3142的答案适用于@user1422167,但我想在这里发布这个答案,因为另一个答案使用了一种非传统的方法来选择KineticJS中的节点 选择节点的KineticJS方法是使用:
event.targetNode
资料来源:
使用var shape=evt.targetNode代码>,您可以在KineticJS节点上调用所有KineticJS方法。在本例中,教程调用getName
方法:shape.getName()
此外,请在此处查看有关KineticJS事件的更多信息:
更新
KineticJS 5.0.1及之前的版本
var shape=evt.targetNode代码>
KineticJS 5.1.0+
var shape=evt.target代码>非常感谢。我还要问一件事` document.getElementById('delete').addEventListener('click',function(){layer.remove(myRect);stage.add(layer);},false);`此代码应该删除选定的矩形,但它会删除所有矩形。你知道为什么吗?试着把layer.remove(myRect)改成myRect.remove();顺便说一句,问一个新问题比在评论中提问更合适。您始终可以在上一个问题的注释中重定向到新问题。很高兴能帮上忙。查看此已在Kineticjs 5.1.0中更新为evt.target
。
var stage = new Kinetic.Stage({
container: 'container',
width: 800,
height: 400
});
var layer = new Kinetic.Layer();
stage.add(layer);
boardBlankArray = [];
var rect, myRect;
var i = 1;
document.getElementById('rect').addEventListener('click', function() {
rect = new Kinetic.Rect({
x: 239,
y: 75,
width: 100,
height: 50,
fill: 'green',
stroke: 'black',
strokeWidth: 4,
offset: [50,25],
draggable: true,
id:"rect"+i
});
i=i+1;
rect.setListening(true);
boardBlankArray[i] = rect;
// add the shape to the layer
layer.add(boardBlankArray[i]);
stage.add(layer);
boardBlankArray[i].on("click",function(){
alert(this.attrs.id);
//myRect = stage.getChildren()[i];
});
}, false);
document.getElementById('big').addEventListener('click', function(){
rect.setWidth(rect.getWidth()+10);
rect.setHeight(rect.getHeight()+10);
rect.setListening(true);
stage.add(layer);
}, false);
document.getElementById('small').addEventListener('click', function() {
rect.setListening(true);
rect.setWidth(rect.getWidth()-10);
rect.setHeight(rect.getHeight()-10);
stage.add(layer);
}, false);
document.getElementById('rotate').addEventListener('click', function() {
rect.setListening(true);
rect.rotate(Math.PI/4);
stage.add(layer);
}, false);
document.getElementById('rotate2').addEventListener('click', function() {
rect.setListening(true);
rect.rotate(-Math.PI/4);
stage.add(layer);
}, false);
document.getElementById('delete').addEventListener('click', function() {
layer.remove(rect);
stage.add(layer);
}, false);
document.getElementById('rect').addEventListener('click', function() {
rect = new Kinetic.Rect({
x: 239,
y: 75,
width: 100,
height: 50,
fill: 'green',
stroke: 'black',
strokeWidth: 4,
offset: [50,25],
draggable: true,
id:"rect"+i
});
i=i+1;
myrect=rect //<<<<<<<<<<<<<<sets recently created rectangle as active
rect.setListening(true);
// add the shape to the layer
layer.add(rect);
stage.add(layer);
rect.on("click",function(){ //<<<<<<<<<<<
myRect = this; //<<<<<<<<<<<<<<<<<<<<<< sets clicked on rectangle as active
});
}, false);
document.getElementById('big').addEventListener('click', function(){
myrect.setWidth(myrect.getWidth()+10); //<<<<<<<<<uses currently active rectangle
myrect.setHeight(myrect.getHeight()+10); //<<<<<<<uses currently active rectangle
myrect.setListening(true);
stage.add(layer);
}, false);
layer.on('click', function(evt) {
// get the shape that was clicked on
var shape = evt.targetNode;
alert('you clicked on \"' + shape.getName() + '\"');
});