Flash表单:展开/收缩部分-我的AS3代码正在运行。。需要建议吗
这个问题涉及: CS5闪存+AS3 你好, 我只是尝试在以下链接中模拟折叠/扩展功能: 表单本身不需要具有功能性 这是我的第一个AS3项目,我相信我把事情弄得太复杂了,代码变得太疯狂了,我一直沉浸在其中。我试着为重复的东西制作某些函数,但我所有的尝试都失败了: 我能做到的是: 从数组中动态创建复选框+标签,并将它们正确放置在彼此下方 单击部分,会导致复选框出现/消失 单击第一节,自动正确重新定位第二节 我的问题, 我找不到一种可行的方法来重新定位第一节展开/折叠时第二节下方的复选框。我基本上需要这些复选框总是位于第二部分下面 这是我的密码:Flash表单:展开/收缩部分-我的AS3代码正在运行。。需要建议吗,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,这个问题涉及: CS5闪存+AS3 你好, 我只是尝试在以下链接中模拟折叠/扩展功能: 表单本身不需要具有功能性 这是我的第一个AS3项目,我相信我把事情弄得太复杂了,代码变得太疯狂了,我一直沉浸在其中。我试着为重复的东西制作某些函数,但我所有的尝试都失败了: 我能做到的是: 从数组中动态创建复选框+标签,并将它们正确放置在彼此下方 单击部分,会导致复选框出现/消失 单击第一节,自动正确重新定位第二节 我的问题, 我找不到一种可行的方法来重新定位第一节展开/折叠时第二节下方的复选框。我基本上需
stop();
import fl.controls.CheckBox;
import fl.controls.RadioButton;
//General Variables
var i:int;
// Tab1 Group 1
var tab1_gp1_main:CheckBox = new CheckBox();
addChild(tab1_gp1_main);
tab1_gp1_main.move(0, 20);
tab1_gp1_main.width = 120;
tab1_gp1_main.label = "Landscape";
// Tab1 Group 2;
var tab1_gp2_main:CheckBox = new CheckBox();
addChild(tab1_gp2_main);
this.tab1_gp2_main.move(0, 20 + tab1_gp1_main.y );
tab1_gp2_main.width = 120;
tab1_gp2_main.label = "Performance";
// Section Click Listeners
tab1_gp1_main.addEventListener(MouseEvent.CLICK, sectionHandler);
tab1_gp2_main.addEventListener(MouseEvent.CLICK, sectionHandler);
//Declare Number of Options;
var tab1_grp1_Options:int = 4;
var tab1_gp1_op_Labels:Array = ["Test1","Test2","Test3","Test4","Test5"];
var tab1_grp2_Options:int = 4;
var tab1_gp2_op_Labels:Array = ["Test1","Test2","Test3","Test4","Test5"];
//Section Click Functions;
function sectionHandler(event:MouseEvent):void
{
switch (event.currentTarget)
{
case tab1_gp1_main :
switch (tab1_gp1_main.selected)
{
case true :
for (i=0; i<=tab1_grp1_Options; i++)
{
//Option Creation Loop
var tab1_gp1_op:CheckBox = new CheckBox();
tab1_gp1_op.name = "tab1_gp1_op" + i;
addChild(tab1_gp1_op);
//Add Properties for Options
tab1_gp1_op.label = tab1_gp1_op_Labels[i];
tab1_gp1_op.width = 120;
//Position 1st Option Below Main
if (tab1_gp1_op.name == "tab1_gp1_op0")
{
tab1_gp1_op.move(20, 20 + this.tab1_gp1_main.y);
}
else
{
//Position Options > 1st below it
var prevOptionNum:int = i - 1;
var prevOption:CheckBox = getChildByName("tab1_gp1_op" + prevOptionNum) as CheckBox;
tab1_gp1_op.move(20, 20 + prevOption.y);
}
//Testing
trace(tab1_gp1_op.name);
trace(tab1_gp1_op.label);
trace(tab1_gp1_op.y);
}
ExpandCollapse("tab1_gp1_main_selected");
break;
default :
//Remove all options for a section
for (i=0; i<=tab1_grp1_Options; i++)
{
var RemoveOption:CheckBox = getChildByName("tab1_gp1_op" + i) as CheckBox;
trace("unselected"+RemoveOption);
removeChild(RemoveOption);
}
ExpandCollapse("tab1_gp1_main_unselected");
}
break;
case tab1_gp2_main :
switch (tab1_gp2_main.selected)
{
case true :
for (i=0; i<tab1_grp2_Options; i++)
{
//Option Creation Loop
var tab1_gp2_op:CheckBox = new CheckBox();
tab1_gp2_op.name = "tab1_gp2_op" + i;
addChild(tab1_gp2_op);
//Add Properties for Options
tab1_gp2_op.label = tab1_gp2_op_Labels[i];
tab1_gp2_op.width = 120;
//Position 1st Option Below Main
if (tab1_gp2_op.name == "tab1_gp2_op0")
{
tab1_gp2_op.move(20, 20 + tab1_gp2_main.y);
}
else
{
//Position Options > 1st below it
var tab1_gp2_op_prevnum:int = i - 1;
var tab1_gp2_op_prevopt:CheckBox = getChildByName("tab1_gp2_op" + tab1_gp2_op_prevnum) as CheckBox;
tab1_gp2_op.move(20, 20 + tab1_gp2_op_prevopt.y);
}
//Testing
trace(tab1_gp2_op.name);
trace(tab1_gp2_op.label);
trace(tab1_gp2_op.y);
}
break;
default :
//Remove all options for a section
for (i=0; i<tab1_grp2_Options; i++)
{
var tab1_gp2_op_remove:CheckBox = getChildByName("tab1_gp2_op" + i) as CheckBox;
trace("unselected"+tab1_gp2_op_remove);
removeChild(tab1_gp2_op_remove);
}
}
break;
}
}
function ExpandCollapse(SectionClicked:String):void
{
switch (SectionClicked)
{
case "tab1_gp1_main_selected" :
var lastOption:CheckBox = getChildByName("tab1_gp1_op" + tab1_grp1_Options) as CheckBox;
tab1_gp2_main.move(0, 20 + lastOption.y);
break;
case "tab1_gp1_main_unselected" :
tab1_gp2_main.move(0, 20 + tab1_gp1_main.y);
break;
default :
}
}
提前谢谢。我认为这将有助于您将此问题视为一个列表,该列表可以是“无限”项,并且具有“无限”嵌套级别。现在,这里有很多硬编码的数字和文本,你的间距设置非常严格。要从无限列表的角度考虑这一点,您可以从应用于每一级展开和折叠的规则开始 每个项目在前一组项目下方显示Y像素。 每个子组显示在父组右侧的X处。 当组折叠时,其中的子对象将隐藏。 父项包含其所有子项。 从这里,您可以想象列表中的每个项目也是一组项目,该组中的项目是项目组,该组中的项目。。。。这就是我们所知道的。如果要为行项目创建一种包含子项的方式,可能需要将每个行项目设置为具有子显示对象的精灵,则可以轻松地将组的高度展开或折叠,并将其视为单个单元。当组展开时,子对象将使用addChild添加到组中,当组折叠时,子对象将从removeChild中删除 通过创建一个表示清单行的新类,它将帮助您将这些项目封装在更小的、更易于使用的包中,这样您就不会到处移动标签和复选框,而只是一个单行项目/组。该组可以包含行项目对象的列表,而行项目对象又可以包含更多列表。无论有多深,功能都或多或少保持不变 我意识到这一切更多的是对面向对象编程的介绍,而不是一个直接的答案,但是学习这些东西将获得巨大的回报。总而言之,您发布的代码试图根据具体情况将这些对象强制放到特定位置,我认为答案是尝试根据您设置的规则创建能够适应情况的对象