AS3 TextField使用手形光标WITH启用mouseChildren

时间:2014-07-14 12:25:14

标签: actionscript-3 click parent-child textfield movieclip

我想做的是;单击文本字段时,将运行一个函数,该函数使用文本字段中的文本作为URLRequest的URL并将您发送到另一个页面。它工作得很好,但我希望光标在悬停在文本字段上时切换到一只手。

我能够通过将它们作为Children添加到具有buttonMode和useHandCursor的MovieClip来实现这一点,但是我必须将MovieClip.mouseChildren设置为false才能使其工作。这就是问题所在; mouseChildren禁止我去页面...

我无法让MovieClip父级使用该函数转到URL,因为有多个文本字段,而不仅仅是一个,我不能使用e.target.text从文本字段中获取URL,因为从父MovieClip获取text属性而不是......

这是我的代码:

var handyMan:MovieClip = new MovieClip;
handyMan.useHandCursor = true;
handyMan.buttonMode = true;
handyMan.mouseChildren = false;

for each (var xit:TextField in linkus)
{
    xit.addEventListener(MouseEvent.CLICK, useLink);
    handyMan.addChild(xit);
}

this.addChild(handyMan);

function useLink(e:MouseEvent):void
{
    navigateToURL(new URLRequest(e.target.text));
}

那么,有没有办法让mouseChildren 同时使用手形光标?

1 个答案:

答案 0 :(得分:1)

您是否尝试过无法选择文字字段?

xit.selectable = false;

这可能允许您不需要使用mouseChildren。

或者,如果您从文本字段收到事件,请使用类似FunctionObject:

的内容
package {
/**
 * ...
 * @author Pimgd
 */

public class FunctionObject 
{
    private var f:Function;
    private var o:Object;
    private var args:Array;
    public function FunctionObject(func:Function, obj:Object, fArgs:Array) {
        f = func;
        o = obj;
        args = fArgs;
        if (args == null) {
            args = new Array();
        }
    }
    public function call(...rest):* {
        var a = args.concat();
        for each(var x in rest) {
            a.push(x);
        }
        var obj:Object = f.apply(o, a);
        if (obj != null) {
            return obj;
        }
    }
    public function apply(target:Object, ...rest):* {
        return f.apply(target, rest);
    }
    public function setArgs(nArgs:Array):void {
        args = nArgs.concat();
    }
    public function getArgs():Array {
        return args;
    }
    public function getFunction():Function {
        return f;
    }
}
}

将forloop改为

for each (var xit:TextField in linkus)
{
    var f:FunctionObject = new FunctionObject(useLink, this, [xit]);
    xit.addEventListener(MouseEvent.CLICK, f.call);
    handyMan.addChild(xit);
}

然后,改变useLink以获取文本字段......

function useLink(tf:TextField):void
{
    navigateToURL(new URLRequest(tf.text));
}

这应该可以解决你的问题。是的,这不好。但它确实有效。

它做的是准备一个函数调用 - useLink,将text作为参数。它将该函数的触发器附加到eventListener,以便在触发时触发准备好的函数调用。