我想了很多方法可以做到这一点,但这是我最终实现的方法:jsfiddle
基本上,你有一个锚(它并不总是必须在那里,如果你愿意,你可以隐藏和显示它。如果你需要帮助,请告诉我),如果你向下拖动锚,它会增加fontSize
, 和如果您向上拖动锚点,它会减小fontSize
.
我遵循完全相同的锚教程,但我添加了一个dragBoundFunc
以限制拖动到 Y 轴:
var anchor = new Kinetic.Circle({
x: x,
y: y,
stroke: '#666',
fill: '#ddd',
strokeWidth: 2,
radius: 8,
name: name,
draggable: true,
dragOnTop: false,
dragBoundFunc: function (pos) {
return {
x: this.getAbsolutePosition().x,
y: pos.y
};
}
});
然后我更新了updateAnchor()
函数以仅检测我添加到名为的组中的单个锚点sizeAnchor
:
var mY = 0;
function update(activeAnchor, event) {
var group = activeAnchor.getParent();
var sizeAnchor = group.get('.sizeAnchor')[0];
var text = group.get('.text')[0];
if (event.pageY < mY) {
text.setFontSize(text.getFontSize()-1);
} else {
text.setFontSize(text.getFontSize()+1);
}
sizeAnchor.setPosition(-10, 0);
mY = event.pageY;
}
基本上mY
是用来比较的e.PageY
,看鼠标是向上还是向下移动。一旦我们可以确定鼠标方向,那么我们就可以决定是否应该增加或减少fontSize
!
或者,您可以使用鼠标滚轮做同样的事情!我自己没有实现它,但它绝对是可行的。就像是:
- 鼠标滚轮向下和
fontSize
减少
- 鼠标滚轮向上和
fontSize
增加
希望这可以为您模拟“缩放”文本。而且我猜能够拖动文本作为“平移”对吗?
更新(基于下面的评论)
这就是您如何限制拖动到 Y 轴的方法dragBoundFunc
:
var textGroup = new Kinetic.Group({
x: 100,
y: 100,
draggable: true,
dragBoundFunc: function (pos) {
return {
x: this.getAbsolutePosition().x,
y: pos.y
};
}
});
查看更新的jsfiddle(与上面相同的 jsfiddle)