从中心缩放文本
Scale Text from it's Center
我是 Canvas 和 easeljs 的新手,我正在尝试让文本从它的中心开始缩放。
我能够在 Canvas 上将文本正确居中,但我不确定如何处理 Tween 中的缩放。
我很确定我需要设置 regx/regy,但我不确定我应该将其设置的确切位置和内容。
我在这里做了一个快速的 jsfiddle,没有任何 regx/regy 设置,您可以从左上角看到文本比例。
https://jsfiddle.net/1woLdrqt/10/
如果有人能给我指明正确的方向,我将永远感激!!
谢谢!!
<canvas id="canvas" style="display: block; background-color: #123; width: 300px; height: 200px;" width="300" height="200"></canvas>
<button id="zoomIn">Zoom In</button>
<button id="zoomOut">Zoom Out</button>
var stage = new createjs.Stage("canvas");
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", stage);
var text = new createjs.Text("hello", "900 36px Ariel", "#fff");
text.name = "myText";
var b = text.getBounds();
text.x = ( ($("#canvas").width() / 2) - (b.width / 2) );
text.y = ( ($("#canvas").height() / 2) - (b.height / 2) );
stage.addChild(text);
$("#zoomIn").click(function() {
var x = stage.getChildByName("myText");
var b = x.getBounds();
createjs.Tween.get(x)
.to({
scaleX: 2,
scaleY: 2,
}, 2000);
});
$("#zoomOut").click(function() {
var x = stage.getChildByName("myText");
var b = x.getBounds();
createjs.Tween.get(x)
.to({
scaleX: 1,
scaleY: 1,
}, 2000);
});
你的想法是对的。设置 regX
和 regY
是解决问题的最佳方法。 EaselJS's documentation defines these properties pretty clearly. 如描述中提供的示例所示,您希望将它们设置为文本宽度 (regX
) 和高度 (regY
) 尺寸的 50%。
这是您代码中上述内容的实现 (JsFiddle):
var b = text.getBounds();
text.regX = b.width / 2;
text.regY = b.height / 2;
// We also don't need to correct the initial position anymore as the origin point of the text is now in its center.
text.x = ($("#canvas").width() / 2); // - (b.width / 2)
text.y = ($("#canvas").height() / 2); // - (b.height / 2)
根据@Konrad 的回答,您可以将 "textAlign" 设置为 "center"。这很方便,因为如果您更改文本,它将水平地从中心流出,而不是从左侧流出。垂直文本对齐没有等效项(textBaseline 不完全相同),因此 bounds/regY 方法也很好。
我是 Canvas 和 easeljs 的新手,我正在尝试让文本从它的中心开始缩放。 我能够在 Canvas 上将文本正确居中,但我不确定如何处理 Tween 中的缩放。
我很确定我需要设置 regx/regy,但我不确定我应该将其设置的确切位置和内容。
我在这里做了一个快速的 jsfiddle,没有任何 regx/regy 设置,您可以从左上角看到文本比例。 https://jsfiddle.net/1woLdrqt/10/
如果有人能给我指明正确的方向,我将永远感激!!
谢谢!!
<canvas id="canvas" style="display: block; background-color: #123; width: 300px; height: 200px;" width="300" height="200"></canvas>
<button id="zoomIn">Zoom In</button>
<button id="zoomOut">Zoom Out</button>
var stage = new createjs.Stage("canvas");
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", stage);
var text = new createjs.Text("hello", "900 36px Ariel", "#fff");
text.name = "myText";
var b = text.getBounds();
text.x = ( ($("#canvas").width() / 2) - (b.width / 2) );
text.y = ( ($("#canvas").height() / 2) - (b.height / 2) );
stage.addChild(text);
$("#zoomIn").click(function() {
var x = stage.getChildByName("myText");
var b = x.getBounds();
createjs.Tween.get(x)
.to({
scaleX: 2,
scaleY: 2,
}, 2000);
});
$("#zoomOut").click(function() {
var x = stage.getChildByName("myText");
var b = x.getBounds();
createjs.Tween.get(x)
.to({
scaleX: 1,
scaleY: 1,
}, 2000);
});
你的想法是对的。设置 regX
和 regY
是解决问题的最佳方法。 EaselJS's documentation defines these properties pretty clearly. 如描述中提供的示例所示,您希望将它们设置为文本宽度 (regX
) 和高度 (regY
) 尺寸的 50%。
这是您代码中上述内容的实现 (JsFiddle):
var b = text.getBounds();
text.regX = b.width / 2;
text.regY = b.height / 2;
// We also don't need to correct the initial position anymore as the origin point of the text is now in its center.
text.x = ($("#canvas").width() / 2); // - (b.width / 2)
text.y = ($("#canvas").height() / 2); // - (b.height / 2)
根据@Konrad 的回答,您可以将 "textAlign" 设置为 "center"。这很方便,因为如果您更改文本,它将水平地从中心流出,而不是从左侧流出。垂直文本对齐没有等效项(textBaseline 不完全相同),因此 bounds/regY 方法也很好。