/** * Add a mouseenter event to an element. * Event is fired once when cursor enter over the element or one of its children * * @param {element} el Element to attach event * @param {Function} fn Function to execute when event is fired * @param {object} obj Object passed as second argument to fn * @param {object/boolean} overrideContext Scope of fn. If overrideContext == true, obj become the scope * */ YAHOO.util.Event.onMouseEnter = function(el, fn, obj, overrideContext) { YAHOO.util.Event._mouseEnterLeave(el, fn, obj, overrideContext, 'mouseover'); }; /** * Add a mouseleave event to an element. * Event is fired once when cursor leave from the element or one of its children * * @param {element} el Element to attach event * @param {Function} fn Function to execute when event is fired * @param {object} obj Object passed as second argument to fn * @param {object/boolean} overrideContext Scope of fn. If overrideContext == true, obj become the scope * */ YAHOO.util.Event.onMouseLeave = function(el, fn, obj, overrideContext) { YAHOO.util.Event._mouseEnterLeave(el, fn, obj, overrideContext, 'mouseout'); }; YAHOO.util.Event._mouseEnterLeave = function(el, fn, obj, overrideContext, eventtype) { YAHOO.util.Event.on( el, eventtype, function(e, obj) { if (e.relatedTarget != this && !YAHOO.util.Dom.isAncestor( this, e.relatedTarget )) { if (!obj.overrideContext) { obj.overrideContext = this; } if (!obj.obj) { obj.obj = {}; } if (obj.overrideContext === true) { obj.fn.apply(obj.obj); } else { obj.fn.apply(obj.overrideContext, obj.obj); } } }, { fn: fn, obj: obj, overrideContext: overrideContext } ); }; // On assigne un évenement de la sorte : YAHOO.util.Event.onMouseEnter( element, function(e, obj) { // Do something }, params, overrideContext ); YAHOO.util.Event.onMouseLeave( element, function(e, obj) { // Do something }, params, overrideContext );
Bon, je ne suis pas vraiment satisfait de cette version mais ça semble fonctionner. Je suis à votre écoute pour toute modification. Proposez moi vos idées en commentaire ou par mail.
Edit : Voilà, je l'ai modifié. Elle est plus propre. Quoique pas assez testée. Vous pouvez voir un exemple ici. Je suis toujours ouvert à vos propositions.
Edit : Une 3° version mieux optimisée et qui marche pour de vrai 
Edit : Une 4° pour que ça marche avec l'handicapé IE6 -_-,
Quand j'ai joué avec Mootools, j'ai trouvé UNE chose particulièrement bonne. L'évenement onmouseenter et onmouseleave. Ces évenements se déclenchent une seule fois quand le curseur entre au dessus de la zone d'un élément ou en sort. Avec un mouseover et mouseout, dès que le curseur passe au dessus d'un autre élément, pourtant fils de l'élément écouté, l'événement se redéclenche.
Commentaires
Bon ça y est, mon mouseenter event pour YUI est réellement au point. http://tinyurl.com/chb3rj
Ajouter un commentaire
Abonnement aux commentaires
S'abonner pour recevoir les commentaires suivants par email
URL de rétrolien : http://alt-i.fr/trackback/616
Fil des commentaires de ce billet