2017-05-23 2 views
2

J'ai donc le code ci-dessous pour une animation de texte automatique. Le texte est devant une image et je veux que les gens voient d'abord l'image complète, puis le texte commence à "taper". Je suppose que le meilleur moyen est d'ajouter un délai de 2-3 secondes avant que le texte commence à animer mais je ne suis pas vraiment sûr de savoir comment faire.Ajouter du retard au texte animé JS?

L'aide serait grandement appréciée. Merci!

function cursorAnimation() { 
    $('#cursor').animate({ 
    opacity: 0 
    }, 'fast', 'swing').animate({ 
    opacity: 1 
    }, 'fast', 'swing'); 
} 
$(document).ready(function() { 
    setInterval('cursorAnimation()', 1000); 
}); 

var text = 'TEXT GOES HERE'; 

$.each(text.split(''), function(i, letter) { 
    setTimeout(function() { 
    $('#container').html($('#container').html() + letter); 
    }, 110 * i); 
}); 
+1

Si vous avez écrit ce code, alors vous savez déjà comment utiliser setTimeout() ... – nnnnnn

+0

Je n'ai pas écrit le code. Cela fait partie d'un projet sur lequel je travaille et le développeur principal est en train de vacciner. Au lieu d'attendre sa réponse, je voulais le faire tout seul. Je suis juste un simple concepteur qui connaît mon code. :) – imsogrym

+0

Il y a déjà une fonction utilisée pour régler le retard dans votre code – CyberAbhay

Répondre

0

Ajout d'un certain retard arbitraire est pas la meilleure façon. Vous ne savez jamais combien de temps une image prendra pour charger sur différents types de réseaux, certains sont très rapides, d'autres peuvent être très lents.

Au lieu de cela, vous devez déclencher votre code sur un événement, par ex. lorsque l'image est chargée Vous pouvez exécuter votre code sur la charge de la fenêtre en option, comme indiqué ci-dessous:

function cursorAnimation() { 
    $('#cursor').animate({ 
    opacity: 0 
    }, 'fast', 'swing').animate({ 
    opacity: 1 
    }, 'fast', 'swing'); 
} 
$(document).ready(function() { 
    setInterval('cursorAnimation()', 1000); 

    $(window).on("load", function(){ 
    // do here tasks that you want to run after all page assets e.g. images have been loaded 
    showText(); 
    });//window load() 
}); 

function showText() { 
    var text = 'TEXT GOES HERE'; 
    $.each(text.split(''), function(i, letter) { 
    setTimeout(function() { 
     $('#container').html($('#container').html() + letter); 
    }, 110 * i); 
    }); 
} 
+0

C'est très vrai. Je n'étais pas très précis en ce qui concerne le projet, c'est une vitrine d'un prototype qui sera montré localement donc le temps de chargement ne sera pas un problème. Mais je vois cela comme le meilleur moyen de mettre en place le projet. Merci beaucoup! – imsogrym

0

Généralement. C'est fait que vous empaquetez le code retardé dans le rappel et que le callback que vous transmettez dans la méthode setTimeout. Pour préserver les fonctionnalités tout en travaillant dans des objets. J'ai recommandé d'appeler bind(this) sur le rappel packagé.

setTimeout(function() { 
    console.log("Delayed message"); 
}.bind(this), 3000); 

Dans votre cas

function cursorAnimation() { 
    $('#cursor').animate({ 
    opacity: 0 
    }, 'fast', 'swing').animate({ 
    opacity: 1 
    }, 'fast', 'swing'); 
} 
$(document).ready(function() { 
    setInterval('cursorAnimation()', 1000); 
}); 

var text = 'TEXT GOES HERE'; 

setTimeout(function() { 
    // delayed code 
    $.each(text.split(''), function(i, letter) { 
    setTimeout(function() { 
     $('#container').html($('#container').html() + letter); 
    }, 110 * i); 
    }); 
    // end of delayed code 
}.bind(this), 3000);