jquery retarde le suivi d’un lien

J’ai une courte animation basée sur css que je veux lire avant qu’un lien ne soit suivi (une carte insérée lors du chargement de la page disparaît après un clic). Actuellement, cependant, la page appelée se charge trop rapidement. Je veux pouvoir retarder brièvement le href d’être suivi.

Voici ce que j’ai

$(document).ready(function() { $("#card").css("top","0px"); $(".clickit").click(function() { $("#card").css("top","-500"); }); }); 

La première ligne insère la carte au chargement de la page. Après cela, c’est l’appel de clic qui modifie le CSS, mais comme je l’ai dit, il doit y avoir une sorte de retard car la page se charge immédiatement, au lieu d’après l’animation. Le CSS qui est modifié ressemble à ceci:

 #card { width: 400px; height: 500px; position: relative; top: -500px; -webkit-transition:all .5s; } 

(oui, je sais que c’est webkit seulement en ce moment)

C’est un problème très similaire à cette question de 2008, mais je sais que jQuery a été mis à jour de manière significative depuis lors, donc je voulais voir s’il y avait une solution plus moderne.

Je vous remercie!

Puisque vous utilisez .css() et -webkit-transition: vous devrez utiliser setTimeout() pour différer le nouvel emplacement.

Essayez l’exemple en direct: http://jsfiddle.net/2WJH9/

 $(document).ready(function() { $("#card").css("top","0px"); $(".clickit").click(function() { $("#card").css("top","-500px"); // Added px to make it work, // or get rid of quotes -500 var href = $(this).attr('href'); // Delay setting the location for one second setTimeout(function() {window.location = href}, 1000); return false; }); });​ 

setTimeout() retardera le window.location de window.location pendant 1 seconde (1 000 millisecondes). Si vous souhaitez faire correspondre les .5 seconde à partir de -webkit-transition: remplacez-le par 500.

Vous pouvez preventDefault () sur le lien, puis utiliser la fonction animate de jQuery pour effectuer vos transitions CSS, en suivant le lien une fois l’animation terminée.

 $('.clickit').click(function(e) { e.preventDefault(); href = $(this).attr('href'); $('#card').animate( { top: '-500px' }, 500, function() { window.location = href; }); }); 

C’est un problème très similaire à cette question de 2008, mais je sais que jQuery a été mis à jour de manière significative depuis lors, donc je voulais voir s’il y avait une solution plus moderne.

Non, toujours la même réponse. Annulez l’événement, puis chargez l’emplacement vous-même plus tard.