题
我在我的舞台上有不同的形状,我想在选择时让它们调整大小。
我认为“将”形状转换成一个组并向它添加改性剂。当取消选择形状时,我可以删除改性剂,然后从组中删除形状并将其添加回其旧父母。
我尝试了,它并没有真正的工作,因为坐标原点的形状更改,如果它有拖网码,那就更糟了。所以它似乎有很多工作,感觉错了。我以为必须有更好的方法,这可能很广泛。
所以我的问题是,在飞行中将改性剂添加到现有形状的最佳方法是什么,并在未选择形状时删除它们?
解决方案
商定,调整“锚”的大小在视觉上没有吸引力,复杂于代码
将单独的调整器添加到图像中是视觉上的尴尬
(o / s windows不添加Clunky寻找调整器以启用调整大小)。
添加单独的redizer也会很快复杂。
隐喻,您必须管理关于您的太阳形状的单独的Resizer-Planets。
当形状受磁杆限制时管理这些卫星是复杂的。
在旋转形状时管理那些卫星由于KineticJS对偏移来定义旋转点而感到惊讶。
替代方案:使用形状本身的边界框来管理调整大小。
- 聆听舞台上的鼠标事件。
- 当用户在形状的边界上旋转时,开始调整大小。
- 作为用户拖动,基于鼠标从拖侧侧侧拖动的距离调整形状大小。
福利:
- 没有锚点需要
- 使用相同的调整大小方法,用户熟悉调整O / L窗口的大小时
- 只涉及形状本身,因此不需要复杂的“卫星锚”管理。
这是一个例子: http://jsfiddle.net/m1erickson/t4e9y/
kImage = new Kinetic.Image({
image:img,
x:10,
y:10,
width:img.width,
height:img.height,
});
layer.add(kImage);
layer.draw();
.
$(stage.getContent()).on('mousedown', function (event) {
var pos=stage.getPointerPosition();
var mouseX=parseInt(pos.x);
var mouseY=parseInt(pos.y);
var ipos=kImage.position();
var isize=kImage.getSize();
var right=ipos.x+isize.width;
if(mouseX>right-10 && mouseX<right+10){
startRight=mouseX;
startWidth=isize.width;
startHeight=isize.height;
}
});
.
$(stage.getContent()).on('mousemove', function (event) {
if(startRight>=0){
var pos=stage.getPointerPosition();
var mouseX=parseInt(pos.x);
var mouseY=parseInt(pos.y);
var dx=mouseX-startRight;
var scaleFactor=(mouseX-(startRight-startWidth))/startWidth;
kImage.width(startWidth*scaleFactor);
kImage.height(startHeight*scaleFactor);
layer.draw();
}
});
.
时结束拖拉大小
$(stage.getContent()).on('mouseup', function (event) {
startRight=-1;
});
.
此示例从右侧边框激活RESIZER。您可以类似地启用其他边界。
您可以通过在Mousedown中更改目标来更改调整大小的形状。
不隶属于 StackOverflow