You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@flex.apache.org by oscaroxy <sc...@yahoo.it> on 2013/12/24 16:03:22 UTC

Understand when mouse stop

Do exist a event/method in order to understand when mouse stop?
I use move mouse event and I would run a method after move mouse event and
when the mouse's stopped!
I tried by enter_frame, but the method run more that one time... 
thanks



--
View this message in context: http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-stop-tp4283.html
Sent from the Apache Flex Users mailing list archive at Nabble.com.

RE: Understand when mouse stop

Posted by Allen Mitchell <aj...@nb.sympatico.ca>.
I don't know if this will help, but I had a requirement for a hover
behaviour, so I implemented the following:

package {

	import flash.events.FocusEvent;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	
	import mx.core.UIComponent;
	import mx.events.MoveEvent;
	
	import org.osflash.signals.Signal;

	public class HoverMonitor {

		private var _target:UIComponent;

		private var _timer:Timer;

		private var _active:Boolean;

		private var _hovering:Boolean;

		private var _stilltime:int;

		private var _sensitivity:int;

		private var _lastX:int;

		private var _lastY:int;

		private var _hoverX:int;

		private var _hoverY:int;
		
		private var _id:String;

		public var onHover:Signal;

		public function HoverMonitor(target:UIComponent, id:String)
{
			_target = target;
			_active = false;
			_hovering = false;
			_id = id;
			onHover = new Signal;
		}

		public function activate(sensitivity:int = 5 , stilltime:int
= 300):void {
			_target.addEventListener(MouseEvent.MOUSE_MOVE ,
onMove);
			_target.addEventListener(MouseEvent.MOUSE_OUT ,
onMouseLeave);
			_active = true;
			_hovering = false;
			_sensitivity = sensitivity;
			_stilltime = stilltime;
			_timer = new Timer(_stilltime , 1)
			_timer.addEventListener(TimerEvent.TIMER , onTimer);
		}

		public function deactivate():void {
			_target.removeEventListener(MouseEvent.MOUSE_MOVE ,
onMove);
			_target.removeEventListener(MouseEvent.MOUSE_OUT ,
onMouseLeave);
			_hovering = false;
			_active = false;
			_timer.stop();
			_timer.removeEventListener(TimerEvent.TIMER ,
onTimer);
			_timer = null;
		}

		protected function onMove(event:MouseEvent):void {
			if (_active) {
				_timer.reset();
				if (_hovering) {
					if (Math.abs(_hoverX - event.localX)
> _sensitivity || Math.abs(_hoverY - event.localY) > _sensitivity) {
						_hovering = false;
						onHover.dispatch({hovering:
false , x: _lastX , y: _lastY, id: _id});
					}
				}
				_lastX = event.localX;
				_lastY = event.localY;
				_timer.start();
			}
		}

		protected function onMouseLeave(event:MouseEvent):void {
			if (_active) {
				_timer.reset();
				if (_hovering) {
					onHover.dispatch({hovering: false ,
x: _lastX , y: _lastY, id: _id});
				}
				_hovering = false;
				_lastX = event.localX;
				_lastY = event.localY;
			}
		}

		protected function onTimer(event:TimerEvent):void {
			if (_active) {
				_hovering = true;
				_hoverX = _lastX;
				_hoverY = _lastY;
				onHover.dispatch({hovering: true , x:
_hoverX , y: _hoverY, id: _id});
			}
		}

	}
}


In actionscript, assuming you have a uicomponent (myButton) defined:

var hvr:HoverMonitor = new HoverMonitor( myButton, "myButton" );
hvr.onHover( function ( o:Object ) : void
{
	trace(o['hovering'],o['x'],o['y'],o['id']);
});
hvr.activate( 0, 1000); // dead stop for 1 second

It uses as3sginals, but could easily be modified to use an event.

Comments are  welcome ( yes, I know the code could be better commented ).

-----Original Message-----
From: Gary Young [mailto:flashflexpro@gmail.com] 
Sent: 2013-12-25 22:59 PM
To: users@flex.apache.org
Subject: Re: Understand when mouse stop

Please don't add such an event into Flex code, it's just not a part of Flex.

-Gary


On Wed, Dec 25, 2013 at 9:57 PM, Gary Young <fl...@gmail.com> wrote:

> There's no way to know when it's stopped, because you can't define it 
> clearly, the only way to define it is to set an interval during which 
> there's no MouseMove event dispatched, then dispatch a MouseStopped, 
> but if you set the interval too small, every MouseMove will have a
MouseStop event.
>
>
> I think use EnterFrameEvent will be practical, if there was any 
> MouseMove in last frame and none the next frame, treat it as a MouseStop.
>
>
>
>
> On Tue, Dec 24, 2013 at 5:15 PM, Alex Harui <ah...@adobe.com> wrote:
>
>> Enter_frame gets dispatched all the time.  There's no way to 
>> immediately know if the mouse is "stopped".  The user could move the 
>> mouse at the very moment you check.  You pretty much have to wait for
some amount of time to
>> see if there is another mouseMove or not.   The SystemManager dispatches
>> an "idle" event when there is no input for 1 second.  Is that what 
>> you want?
>>
>> http://help.adobe.com/en_US/FlashPlatform//reference/actionscript/3/m
>> x/mana 
>> gers/SystemManager.html#event:idle<http://help.adobe.com/en_US/FlashP
>> latform//reference/actionscript/3/mx/managers/SystemManager.html#even
>> t:idle>
>>
>> On 12/24/13 7:03 AM, "oscaroxy" <sc...@yahoo.it> wrote:
>>
>> >Do exist a event/method in order to understand when mouse stop?
>> >I use move mouse event and I would run a method after move mouse 
>> >event
>> and
>> >when the mouse's stopped!
>> >I tried by enter_frame, but the method run more that one time...
>> >thanks
>> >
>> >
>> >
>> >--
>> >View this message in context:
>> >
>> http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-
>> stop-
>> >tp4283.html
>> >Sent from the Apache Flex Users mailing list archive at Nabble.com.
>>
>>
>



-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2014.0.4259 / Virus Database: 3658/6949 - Release Date: 12/25/13


Re: Understand when mouse stop

Posted by Gary Young <fl...@gmail.com>.
Please don't add such an event into Flex code, it's just not a part of Flex.

-Gary


On Wed, Dec 25, 2013 at 9:57 PM, Gary Young <fl...@gmail.com> wrote:

> There's no way to know when it's stopped, because you can't define it
> clearly, the only way to define it is to set an interval during which
> there's no MouseMove event dispatched, then dispatch a MouseStopped, but if
> you set the interval too small, every MouseMove will have a MouseStop event.
>
>
> I think use EnterFrameEvent will be practical, if there was any MouseMove
> in last frame and none the next frame, treat it as a MouseStop.
>
>
>
>
> On Tue, Dec 24, 2013 at 5:15 PM, Alex Harui <ah...@adobe.com> wrote:
>
>> Enter_frame gets dispatched all the time.  There's no way to immediately
>> know if the mouse is "stopped".  The user could move the mouse at the very
>> moment you check.  You pretty much have to wait for some amount of time to
>> see if there is another mouseMove or not.   The SystemManager dispatches
>> an "idle" event when there is no input for 1 second.  Is that what you
>> want?
>>
>> http://help.adobe.com/en_US/FlashPlatform//reference/actionscript/3/mx/mana
>> gers/SystemManager.html#event:idle<http://help.adobe.com/en_US/FlashPlatform//reference/actionscript/3/mx/managers/SystemManager.html#event:idle>
>>
>> On 12/24/13 7:03 AM, "oscaroxy" <sc...@yahoo.it> wrote:
>>
>> >Do exist a event/method in order to understand when mouse stop?
>> >I use move mouse event and I would run a method after move mouse event
>> and
>> >when the mouse's stopped!
>> >I tried by enter_frame, but the method run more that one time...
>> >thanks
>> >
>> >
>> >
>> >--
>> >View this message in context:
>> >
>> http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-stop-
>> >tp4283.html
>> >Sent from the Apache Flex Users mailing list archive at Nabble.com.
>>
>>
>

Re: Understand when mouse stop

Posted by Gary Young <fl...@gmail.com>.
There's no way to know when it's stopped, because you can't define it
clearly, the only way to define it is to set an interval during which
there's no MouseMove event dispatched, then dispatch a MouseStopped, but if
you set the interval too small, every MouseMove will have a MouseStop event.


I think use EnterFrameEvent will be practical, if there was any MouseMove
in last frame and none the next frame, treat it as a MouseStop.




On Tue, Dec 24, 2013 at 5:15 PM, Alex Harui <ah...@adobe.com> wrote:

> Enter_frame gets dispatched all the time.  There's no way to immediately
> know if the mouse is "stopped".  The user could move the mouse at the very
> moment you check.  You pretty much have to wait for some amount of time to
> see if there is another mouseMove or not.   The SystemManager dispatches
> an "idle" event when there is no input for 1 second.  Is that what you
> want?
> http://help.adobe.com/en_US/FlashPlatform//reference/actionscript/3/mx/mana
> gers/SystemManager.html#event:idle
>
> On 12/24/13 7:03 AM, "oscaroxy" <sc...@yahoo.it> wrote:
>
> >Do exist a event/method in order to understand when mouse stop?
> >I use move mouse event and I would run a method after move mouse event and
> >when the mouse's stopped!
> >I tried by enter_frame, but the method run more that one time...
> >thanks
> >
> >
> >
> >--
> >View this message in context:
> >
> http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-stop-
> >tp4283.html
> >Sent from the Apache Flex Users mailing list archive at Nabble.com.
>
>

Re: Understand when mouse stop

Posted by Alex Harui <ah...@adobe.com>.
Enter_frame gets dispatched all the time.  There's no way to immediately
know if the mouse is "stopped".  The user could move the mouse at the very
moment you check.  You pretty much have to wait for some amount of time to
see if there is another mouseMove or not.   The SystemManager dispatches
an "idle" event when there is no input for 1 second.  Is that what you
want? 
http://help.adobe.com/en_US/FlashPlatform//reference/actionscript/3/mx/mana
gers/SystemManager.html#event:idle

On 12/24/13 7:03 AM, "oscaroxy" <sc...@yahoo.it> wrote:

>Do exist a event/method in order to understand when mouse stop?
>I use move mouse event and I would run a method after move mouse event and
>when the mouse's stopped!
>I tried by enter_frame, but the method run more that one time...
>thanks
>
>
>
>--
>View this message in context:
>http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-stop-
>tp4283.html
>Sent from the Apache Flex Users mailing list archive at Nabble.com.


Re: Understand when mouse stop

Posted by Justin Ransom Dallas <ju...@gmail.com>.
The only way I can think to have a MouseStopped type of event, because
there isn't one listed
here<http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/MouseEvent.html>,
is kind of hackish.  I would add a MouseEvent.Mouse_Move listener to the
top application/stage instance, in the event handler, I would start a timer
with a timeout of some sort, say 2000 ms.  After 2000ms, I would then kick
off my "MouseStopped" logic.  You would just have to make sure you handle
your references and handlers properly so they don't build up and possibly
degrade performance.


On Tue, Dec 24, 2013 at 10:03 AM, oscaroxy <sc...@yahoo.it> wrote:

> Do exist a event/method in order to understand when mouse stop?
> I use move mouse event and I would run a method after move mouse event and
> when the mouse's stopped!
> I tried by enter_frame, but the method run more that one time...
> thanks
>
>
>
> --
> View this message in context:
> http://apache-flex-users.2333346.n4.nabble.com/Understand-when-mouse-stop-tp4283.html
> Sent from the Apache Flex Users mailing list archive at Nabble.com.
>



-- 
Justin Dallas
Phone:814-880-5637