如何在AS3中检测光标变为I型光标?

5

我在我的Flash项目中有一个自定义光标。默认情况下,当你悬停在文本字段上时,自定义光标仍然可见,并且您会同时看到I字形光标和自定义光标。为了避免这种情况,我需要在出现I字形光标时隐藏我的自定义光标(即当你将鼠标悬停在文本字段上时)。此外,光标始终设置为MouseCursor.AUTO状态。那么我如何检测它何时变为I字形光标呢?


很遗憾,我非常有信心地说,没有任何事件可以跟踪系统光标显示的状态。您可能需要为文本字段本身添加事件侦听器(滚动和滚出),并以此方式进行管理。 - Marty
1个回答

1
这里有一个试图模拟您所需功能的东西,它向舞台添加了一个单一事件监听器,并检测文本字段是否发生滚动/移出事件,并相应地更改光标:
package 
{
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.ui.Mouse;
    import flash.ui.MouseCursor;

    public class Main extends Sprite 
    {

        private var textField1:TextField = new TextField();
        private var textField2:TextField = new TextField();

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var loader:Loader = new Loader();
            loader.load(new URLRequest('bg.png'));
            addChild(loader);               

            textField1.text = "Text Field 1";
            textField1.border = true;
            textField1.x = 100;
            addChild(textField1);

            textField2.text = "Text Field 2";
            textField2.border = true;
            textField1.x = 400;
            addChild(textField2);

            Mouse.cursor = MouseCursor.HAND;

            stage.addEventListener(MouseEvent.ROLL_OVER, onRollOver, true);
            stage.addEventListener(MouseEvent.ROLL_OUT, onRollOut, true);
        }

        private function onRollOver(e:MouseEvent):void 
        {
            var tf:TextField = e.target as TextField;
            if (tf)
            {
                Mouse.cursor = MouseCursor.IBEAM;
                //hide your custom cursor here
            }
        }

        private function onRollOut(e:MouseEvent):void 
        {
            var tf:TextField = e.target as TextField;
            if (tf)
            {
                Mouse.cursor = MouseCursor.HAND;
                //show your custom cursor here
            }
        }
    }

}

ROLL_*事件只会发生一次,我认为你要找的是MOUSE_*事件。 - xLite
我认为在这种情况下,roll事件是可以的,它们将在光标悬停在TextField上时被触发,并且光标将被更改。光标离开时会再次触发该事件,并将光标更改回来。不需要使用MOUSE_*事件不断地设置光标为IBeam。 - Barış Uşaklı
是的,我做到了。对我来说它是有效的,光标在文本字段上变成了IBEAM,一旦离开文本字段就变成了手形。 - Barış Uşaklı
你能否再试一次,将两个文本字段后面设置一个较大的位图背景,并查看它是否仍然存在这个问题? - xLite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接