正如标题所说,我需要找到一种方法来执行此代码,但是以更有效的方式。
if (texten.texten.numLines < 3)
{
texten.texten.y = 0;
texten.texten.height = 118;
}
if (texten.texten.numLines == 3)
{
texten.texten.y =- 59;
texten.texten.height = 177;
}
else if (texten.texten.numLines == 4)
{
texten.texten.y =- 118;
texten.texten.height = 236;
}
else if (texten.texten.numLines == 5)
{
texten.texten.y =- 177;
texten.texten.height = 295;
}
else if (texten.texten.numLines == 6)
{
texten.texten.y =- 236;
texten.texten.height = 354;
}
else if (texten.texten.numLines == 7)
{
texten.texten.y =- 295;
texten.texten.height = 413;
}
else if (texten.texten.numLines == 8)
{
texten.texten.y =- 354;
texten.texten.height = 472;
}
else if (texten.texten.numLines == 9)
{
texten.texten.y =- 413;
texten.texten.height = 531;
}
else if (texten.texten.numLines == 10)
{
texten.texten.y =- 472;
texten.texten.height = 590;
}
正如您所看到的,此代码将降低textField(texten.texten是我在movieClip中的textField)并提高它的高度(每当添加新行时使文本跳起来)
答案 0 :(得分:2)
我认为你根本不需要循环。似乎有一种大致类似的模式: (只是把它写在我的头顶,没有测试它)
if(texten.texten.numLines > 2){
texten.texten.y = -59 * (texten.texten.numLines - 2);
texten.texten.height = 118 + (59 * (texten.texten.numLines - 2));
} else {
texten.texten.y = 0;
texten.texten.height = 118;
}
答案 1 :(得分:0)
我现在看到三种方法可以做到这一点,一种是使用循环的通用方法,另一种是没有循环的方法,另一种是基于实际情况的特定方式:
通用方法(带循环): 这是效率较低的方法,我之所以提到它只是因为你特意要求一个循环。 要替换像这样的if / elseif列表,可以使用Arrays存储数据,dans遍历它们以测试值:
// we store the numbers in tree Arrays
var lineValues:Array = [2, 3, 4, 5, 6, 7, 8, 9, 10];
var yValues:Array = [0, -59, -118, -177, -236, -295, -354, -413, -472];
var heightValues:Array = [118, 177, 236, 295, 354, 413, 472, 531, 590];
// we store and limit the numLines value to valid (for us) values
var numLines:Number = texten.texten.numLines;
numLines = (numLines > 10 ? 10 : (numLines < 2 ? 2 : numLines));
// here, we loop
for (var i:Number = 0; i < lineValues.length; i++) {
if (lineValues[i] == numLines) {
texten.texten.y = yValues[i];
texten.texten.height = heightValues[i];
}
}
通用方法(无循环): 此方法使用与上一个相同的基础:将数据存储在Array中,然后访问它。但在这里,我们直接访问它。
// we store the numbers in two Arrays (no need for lineValues !)
var yValues:Array = [0, -59, -118, -177, -236, -295, -354, -413, -472];
var heightValues:Array = [118, 177, 236, 295, 354, 413, 472, 531, 590];
// we store and limit the numLines value to valid (for us) values
var index:Number = texten.texten.numLines;
index = (index > 10 ? 10 : (index < 2 ? 2 : index));
// index is in [2 -> 10]. Let's move it to [0 -> 8]
index -= 2;
// And that's it !
texten.texten.y = yValues[index];
texten.texten.height = heightValues[index];
具体方法(无循环,无数组): 在您的情况下,我们可以看到每行的值使用59增量。所以,我们可以使用numLines来计算位置。
// we store and limit the numLines value to valid (for us) values
var numLines:Number = texten.texten.numLines;
numLines = (numLines > 10 ? 10 : (numLines < 2 ? 2 : numLines));
// and that's all
texten.texten.y = -((numLines-2)*59);
texten.texten.height = numLines*59