AS3.0 给addEventListener里的方法加上参数传递

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就是空的

www.zeeklog.com  - AS3.0 给addEventListener里的方法加上参数传递

如果传递的是String就可以

www.zeeklog.com  - AS3.0 给addEventListener里的方法加上参数传递

1、发现在造纸术晒纸环节中,能够传递MovieClip

www.zeeklog.com  - AS3.0 给addEventListener里的方法加上参数传递

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);
}