Если вам нужно нарисовать буквы одну за другой, setTimeout () не будет работать для циклов. Вместо этого вам нужно написать рекурсивную (самопризывающую) функцию.
Пожалуйста, посмотрите на пример, надеюсь, это сработает для вас.
<div class="div"></div>
var $textOldContainer = $('.div');
var textNew = 'New text';
var textOld = 'old text';
var textOldLength = textOld.length;
var textOldCnt = textOldLength;
var secondTime = false;
function loopChar() {
if( !secondTime ) {
setTimeout(function() {
if( textOldCnt <= textOldLength && textOldCnt >= 0 ) {
loopChar();
textOldCnt --;
$textOldContainer.text( textOld.substring(0, textOldCnt - 1) );
}
if( textOldCnt == 0 ) {
secondTime = true;
}
}, 10);
} else {
setTimeout(function() {
if( textOldCnt <= textNew.length ) {
loopChar();
textOldCnt++;
$textOldContainer.text( textNew.substring(0, textOldCnt - 1) );
}
}, 50);
}
}
loopChar();
Вот пример Демо