我正在flash中创建一个音序器。我有8个符号轨道实例,每个实例都有一个播放按钮。我想使用单个事件监听器来处理自己播放每个样本。我遇到的问题是我不能给每个按钮一个唯一的实例名称,因为它在轨道影片剪辑中。 这是我的代码:
masterContainer.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void{
if(event.target.name == "masterPlay"){
trace("master play was clicked");
}
if(event.target.name == "silglePlay1"){
trace("track 1 play button");
}
if(event.target.name == "silglePlay2"){
trace("track 2 play button");
}
}
所有曲目都在主容器内加上主控件。 单个播放按钮位于轨道符号的旁边。 不确定代码是否有帮助,但有没有办法在不创建8个单独的轨道符号的情况下这样做?
答案 0 :(得分:0)
处理跟踪影片剪辑中的单击事件,然后在事件处理程序中使用冒泡方式调度您自己的自定义事件,您可以处理该事件并将event.target与您可以唯一的轨道实例名称进行比较。换句话说,你的轨道组件应该是自给自足的并且封装它自己的逻辑,在这种情况下是播放按钮点击处理。
答案 1 :(得分:0)
假设track1
,track2
,...,track8
是您正在使用的曲目,并且所有曲目中的播放按钮均为playBtn
。然后你可以为所有人创建一个单一的监听器,而不会在轨道中为播放按钮设置不同的名称。 (我像你一样添加了masterContainer
的听众)
masterContainer.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void{
var tapped = e.target;
if(tapped.name == "masterPlay"){
trace("master play was clicked");
}
if(tapped.name == "playBtn"){
switch(tapped.parent.name){
case "track1":
trace("track 1 play button");
break;
case "track2":
trace("track 2 play button");
break;
case "track3":
trace("track 3 play button");
break;
case "track4":
trace("track 4 play button");
break;
case "track5":
trace("track 5 play button");
break;
case "track6":
trace("track 6 play button");
break;
case "track7":
trace("track 7 play button");
break;
case "track8":
trace("track 8 play button");
break;
}
}
}
我想这会对你有帮助。