Je travaille avec une seule div avec une image à l'intérieur. J'ai besoin que l'animation défile de droite à gauche de la page, puis revienne à droite et continue en boucle. J'ai parcouru de nombreux articles, mais je ne parviens pas à faire fonctionner le script correctement.
'$(document).ready(function(){
function loop() {
$('#clouds').animate({left: '+=1400',},50000, 'linear', function(){
loop();
});
HTML
< div id="clouds">< img border="0" alt="animated clouds" src="/images/clouds.png" />< /div>
CSS
#clouds {
position:absolute;
z-index:500;
right:0px;
top:10px;
}
Essaye ça:
JSFiddle http://jsfiddle.net/2YqH2/
Vous ne déplacez pas les nuages vers la droite. Dans la fonction de boucle, j'ai ajouté
$('#clouds').css({right:0});
et la boucle continuera à partir de là. J'ai également modifié votre animation pour animer la propriété "droite" puisque vous avez dit que vous souhaitiez que les nuages se déplacent de droite à gauche.
De plus, votre javascript n'était pas bien formé. Assurez-vous de bien avoir ces accolades et parenthèses fermantes! Voici le javascript corrigé.
$(document).ready(function() {
function loop() {
$('#clouds').css({right:0});
$('#clouds').animate ({
right: '+=1400',
}, 5000, 'linear', function() {
loop();
});
}
loop();
});
Juste pour ajouter des informations à d’autres, si vous n’utilisez pas animate()
, vous devez utiliser un setTimeout()
pour éviter l’erreurUncaught RangeError: Maximum call stack size exceeded
Exemple ( Utilisation de jQuery ):
.js
function looping() {
$('.loader').fadeOut(1000);
$('.loader').fadeIn(1000);
setTimeout(function(){
looping();
}, 10);
}
.html
<div class='loader'>Loading...</div>
JAVASCRIPT:
$(document).ready(function() {
$('#clouds').click(function() {
loop();
});
function loop(){
alert('a');
$('#clouds').animate({
opacity: 0.25,
left: '+=1400',
height: 'toggle'
}, 5000, 'linear', function() {
loop();
});
}
});
HTML:
<div id="clouds"><img border="0" alt="animated clouds" src="../img/image.png" /></div>
votre erreur est que vous n'appelez jamais la boucle de fonction. regardez comment cela fonctionne, vous pouvez supprimer la alert('a')
car il s’agit simplement d’un indicateur pour savoir que le cycle recommence. vous devez maintenant effectuer le mouvement inverse (comme pour réinitialiser le div, pour recommencer le cycle de mouvement).
Toutes les réponses ci-dessus sont des solutions un peu "bidouillables".
Selon la documentation jQuery pour animate()
, le deuxième paramètre est un objet options
qui a un paramètre complete
; une fonction appelée à la fin de l'animation.
Dans le cas d'OP, cet objet option
serait configuré comme suit:
function loop() {
$('#clouds').css({right:0});
$('#clouds').animate({
right: '+=1400',
}, {
duration: 5000,
easing: 'linear',
complete: loop
});
}
loop();