2012-03-28 3 views
0

Ce code fonctionne parfaitement sauf si vous cliquez sur un lien. La page est redirigée avant que jquery ne modifie visuellement la marge à zéro. Est-il possible d'empêcher la redirection jusqu'à ce que jquery remette la marge à zéro?jquery empêche de rediriger après animation

HTML

<div id="sidebar"> 
    <div class="navigation"> 
    <ul> 
    <a href="../../../index.html"><li><img src="dbs/images/home.png" title="" width="40" height="38" />به عقب</li></a> 
    <a href="../../000_Movies/_assets/playlist.html"><li>فیلم ها</li></a> 
    <a href="../../020_IAM/_assets/playlist.html"><li>وزارتخانه ها ایران زنده</li></a> 
    <a href="../../080_Worship/_assets/playlist.html"><li>پرستش</li></a> 
    <a href="../../330_Teen/_assets/playlist.html"><li>جوانان</li></a> 
    <a href="../../300_Children/_assets/playlist.html"><li>کودکان</li></a> 
    <a href="../../400_Testimony/_assets/playlist.html"><li>پزوهش ها</li></a> 
    <a href="../../600_SOC/_assets/playlist.html"><li>دانشکده مسیح</li></a> 
    <a href="../../750_Women/_assets/playlist.html"><li>زنان</li></a> 
    <a href="../../800_BAHAM/_assets/playlist.html"><li>کلیپ های سری</li></a> 

    </ul> 
</div> 
</div> 

JS

$('.navigation a li').click(function() { 
    $('.slider').animate({ 
     marginLeft: 0 
    }, 500); 
}); 
+0

Je me demande quel est votre cas d'utilisation. Si vous allez quitter la page, est-ce que cela aurait vraiment de l'importance pour l'animation de finir * avant * que vous redirigiez? En tant qu'utilisateur, je dirais que cela a un énorme potentiel d'irritation. –

+0

Je suis juste en train d'essayer certaines choses. – Blainer

Répondre

4

.animate() prend une fonction de rappel comme ceci:

$('.navigation a li').click(function() { 
    $('.slider').animate({ 
     marginLeft: 0 
    }, 500,function() { 
     //thing to do when you animation is finished e.g. 
     location.href = 'http://redirect.to.url'; 
    }); 
}); 

Pour une documentation complète, consultez la (très utile) jQuery docs:

0

Tout d'abord, votre code HTML n'est pas valide. Mettez les liens dans les éléments de la liste, et non l'inverse. Ajustez votre sélecteur en conséquence (.navigation li a).

Ensuite, maintenant que vous configurez l'événement sur le lien plutôt que l'élément de liste, faites votre gestionnaire:

  • Prévenir l'événement par défaut
  • Ajouter un rappel à l'animation, de sorte que lorsque l'animation est sur la page va à this.getAttribute('href').

Cela devrait le faire.

+0

Comment est-ce que j'écrirais le js pour ceci – Blainer

+0

Voir la réponse d'Adam pour comment inclure le rappel. –

0

Arrêtez la propagation d'événement à partir du gestionnaire de clics li.

$('.navigation a li').click(function (e) { 
    $('.slider').animate({ 
     marginLeft: 0 
    }, 500); 

    e.stopPropagation(); 
});