AS3.0 给addEventListener里的方法加上参数传递
目录
一、目的
1、想:AS3.0 给addEventListener里的方法加上参数传递
二、参考
1、AS3.0 给addEventListener里的方法加上参数传递
- 总结:很好,能使用
- 总结:方法一:能使用在按钮很多的情况下,使用数组给按钮添加点击监听事件,也可以类推到其他的情况中
- 总结:方法二:尝试了使用在多个按钮点击事件中,发现不好使用,但是可以给监听事件传递参数
方法一:
for(var i:int=1;i<=4;i++){
this["btn"+i].addEventListener(MouseEvent.CLICK,EventUp(btnClick,i));
}
function btnClick(e:MouseEvent,...arg){
photoMC.gotoAndStop(arg);
}
function EventUp(f:Function,... arg):Function{
return function(e:Event){f.apply(null,[e].concat(arg))};
}
将触发事件的方法包裹在另一个函数里,然后再将e:Event 对象合并到一个数组(加上要传递的参数)。
这里使用apply方法,为btnClick绑定两个参数(e和arg)
之后触发btnClick时,e对应e:MouseEvent,而arg对应...arg
方法二:
var sayHello:String = "xxxxxx";
btn1.addEventListener(MouseEvent.CLICK,function (e:MouseEvent){clickHandlerWithArg(e,sayHello)});
function clickHandlerWithArg(e:MouseEvent,arg:String):void
{
var out:String= e.target + "发出事件(有参数) :" + arg;
trace(out);
}
使用匿名函数里包裹触发事件(加上参数)
参数包括e和value
三、操作:参考1中的方法一:能使用
1、关键帧中点击按钮进行元件切换
import flash.events.MouseEvent;
//数组 :按钮
var arr_btn_introduce:Array = null;
stop();
Start_enjoy();
//功能:初始化
function Start_enjoy()
{
if (! stage.hasEventListener(MouseEvent.CLICK))
{
stage.addEventListener(MouseEvent.CLICK,Click_enjoy);
}
mc_introduce.gotoAndStop(1);
//按钮添加点击事件;
if (arr_btn_introduce==null)
{
arr_btn_introduce=new Array();
if (arr_btn_introduce.length == 0)
{
arr_btn_introduce.push(btn_0);
arr_btn_introduce.push(btn_1);
arr_btn_introduce.push(btn_2);
arr_btn_introduce.push(btn_3);
arr_btn_introduce.push(btn_4);
arr_btn_introduce.push(btn_5);
arr_btn_introduce.push(btn_6);
arr_btn_introduce.push(btn_7);
arr_btn_introduce.push(btn_8);
arr_btn_introduce.push(btn_9);
}
for (var i:int=0; i<arr_btn_introduce.length; i++)
{
arr_btn_introduce[i].addEventListener(MouseEvent.CLICK,CLICK_arr_btn_introduce(btnClick,i));
}
}
}
//功能:销毁
function Destroy_enjoy()
{
if (stage.hasEventListener(MouseEvent.CLICK))
{
stage.removeEventListener(MouseEvent.CLICK,Click_enjoy);
}
}
function btnClick(e:MouseEvent,arg:int)
{
mc_introduce.gotoAndStop(arg+1);
}
function CLICK_arr_btn_introduce(f:Function,arg:int):Function
{
return function(e:Event){f.apply(null,[e].concat(arg))};
}
function Click_enjoy(e:MouseEvent)
{
trace(e.target.name);
}
三、操作:参考1中的方法二
1、注意:好像不能传递MovieClip(Object也不行)
如果传递的参数是MovieClip就是空的
如果传递的是String就可以
1、发现在造纸术晒纸环节中,能够传递MovieClip
1、操作:元素添加点击事件,并且传递String参数(测试不能传递MovieClip参数、Object也不行)
var sayHello:String = "xxxxxx";
arr_inside_pic5.addEventListener(MouseEvent.CLICK,function (e:MouseEvent){clickHandlerWithArg(e,sayHello)});
function clickHandlerWithArg(e:MouseEvent,arg:String):void
{
var out:String= e.target + "发出事件(有参数) :" + arg;
trace(out);
}