2010-06-27 9 views
3

Je suis en train de faire une google.com comme fade in (Cept je veux disparaître du texte)Jquery mousemove() s'active sans mouvement de la souris

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    $(document).ready(function() { 
    $("html").mousemove(function() { 
     $("p").fadeOut("slow"); 
    }); 
    }); 
</script> 

Avec ce code, mon fondu est automatiquement activé même si je n'ai pas bougé la souris. Se produit dans tous les navigateurs. Des conseils?

+0

Impossible de reproduire dans Chrome 5, FF 3.6. –

+0

Voici un exemple http://www.ximnet.com.my/jquery/mousemove.htm – thegreyspot

Répondre

5

Depuis l'événement se déclenche une fois au départ et mousemove se déclenche à chaque fois que vous déplacez un pixel, vous pouvez simplement ignorer la première (éventuellement automatique, selon le navigateur) événement mousemove pour obtenir l'effet que vous voulez, comme ceci:

$(function() { 
    var moveCount = 0; 
    $("html").mousemove(function() { 
    if(moveCount++ === 0) return; //first run? 
    $("p").fadeOut("slow"); 
    $(this).unbind('mousemove'); //unbind this, no need to stick around 
    }); 
});​ 

You can try a demo here, tout ce que nous faisons est en ignorant le très premier tir de l'après événement mousemove que nous faisons le fondu et UNBIND ce gestionnaire afin qu'il ne fonctionne pas pour les futurs mousemove mises à feu, tout nettoyage .

+0

Je sais avec certitude que Firefox (3.x au moins) ne déclenche * PAS * un événement de mousemove automatique. Comme, il y avait des moments où je me demandais pourquoi la page de recherche Google n'avait pas effectué le fondu. C'était, bien sûr, parce que je n'avais pas bougé la souris. Tout navigateur qui a besoin d'être corrigé, car c'est juste un comportement inattendu et étrange. –

+0

Cool nick! Ça marche. Étrangement mais en chrome si la souris est étendue dans la zone du site Web (non déplacé), il s'active. Firefox et IE fonctionnent bien. Pas de gros problème. Merci encore (** souhaite qu'il pourrait donner plus un!) @George Marian Je ne suis pas le seul avec problème consultez http://forum.jquery.com/topic/mousemove-strange-behavior-in-ie Are vous sûr que google utilise jquery pour leur fondu? – thegreyspot

+0

Non, ils n'utilisent pas jQuery: onmousemove = "google && google.fade && google.fade (event)" .... Une idée sur jQuery ou peut-être les différentes façons de se connecter à des événements qui en est la cause? –

0

Etes-vous sûr qu'il n'y a pas de 'micro mouvements'? Parfois, une souris optique peut faire en sorte que les mouvements ne s'immatriculent que dans la poussière ou la saleté.

+0

Bon point, mais je n'ai pas le problème avec d'autres situations (par exemple google.com) – thegreyspot

1

Il semble que si la page se charge et que la souris soit présente sur la page une fois la page chargée, elle déclenchera un événement. Essayez de cacher votre souris de la page en la laissant sur la barre d'adresse ou quelque part sur le menu en haut de votre navigateur, actualisez la page avec F5 et notez que l'événement n'est pas déclenché. De même, essayez de rafraîchir avec F5 et faites un clic droit sur la page. Gardez votre souris sur la page mais assurez-vous que le menu contextuel est toujours ouvert. Une fois la page chargée, sans bouger votre souris, appuyez sur la touche Échap de votre clavier pour que la souris sorte du menu contextuel et retourne à la page. La souris n'a pas bougé mais a été détectée sur la page et l'événement est déclenché.

Testé dans Chrome 5 sur Windows 7. Trop paresseux pour essayer un autre navigateur mais je suppose que c'est la même chose.

Questions connexes