текстовый эффект jQuery, где слова появляются один за другим
меня спросили, могу ли я придумать текстовый эффект в HTML с помощью jQuery, где я получаю строку, а затем подпрограмма автоматически обнаруживает слова и анимирует каждое слово по одному.
нравится.
сек в анимации показывает: "счастливый"
сек в анимации показывает: "Happy New"
сек в анимации показывает: "С Новым годом"
сек в анимационные шоу:"с Новым 2011 годом"
каждое слово должно "исчезать / анимироваться" медленно, я думал, что простая скользящая панель, идущая прямо в пикселях, будет удовлетворительной, но нет. Слово за слово.
Мне могут понадобиться некоторые идеи по этому поводу. Я знаю некоторые jQuery и много Javascript, поэтому я думаю, что мне нужна помощь с частью jQuery.
для списка слов я бы просто разделил на "" (пробелы) и принял это ",.!"etc являются частью слово.
но как оживить этот "динамический массив" в jQuery - есть ли где-нибудь плагин или я первый?
Я думал, что, возможно, маркированный список тоже может быть трюком, затем сделать его плавающим горизонтально, как меню, а затем добавить слово как новую пулю, один раз в секунду. Но я рад видеть, что эксперты здесь придумали для решения. : O)
редактировать Из отмеченного ответа я получил следующее:
var str = $('div#greeting h1').html(); // grab text
$('div#welcome h1').html(""); // clear text
var spans = '<span>' + str.split(" ").join(' </span><span>') + '</span>';
$(spans).hide().appendTo('div#greeting h1').each(function(i)
{
$(this).delay(500 * i).fadeIn();
});
в Сильный тег работает, но каким-то образом части текста исчезают в группе.
попробуйте это: - вот тестовый текст. [strong]мы считаем, что это лучше [/strong], чем когда-либо."и вижу проблему.
3 ответов
пример: http://jsfiddle.net/TcdQb/
var str = $('span.ticker').text();
var spans = '<span>' + str.split(/\s+/).join(' </span><span>') + '</span>';
$(spans).hide().appendTo('body').each(function(i) {
$(this).delay(1000 * i).fadeIn();
});
это помещает слова в теги span:
"<span>Happy </span><span>New </span><span>Year </span><span>2011</span>"
создает элементы DOM:
$(spans)
скрывает их:
.hide()
добавляет их:
.appendTo('body')
наконец, перебирает их, используя
.each()
и.delay()
the.fadeIn()
каждого из них на 1000 мс, умноженное на текущий индекс итерации.
EDIT: вот обновление для примера, который использует более короткую задержку и более длинную анимацию, поэтому анимации немного перекрываются.
$(this).delay(400 * i).fadeIn(1000);
EDIT: иметь дело с вложенные теги (только один уровень) вы можете сделать это:
var h1 = $('div#greeting h1');
h1.hide().contents().each(function() {
var words;
if (this.nodeType === 3) {
words = '<span> ' + this.data.split(/\s+/).join(' </span><span> ') + ' </span>';
$(this).replaceWith(words);
} else if (this.nodeType === 1) {
this.innerHTML = '<span> ' + this.innerHTML.split(/\s+/).join(' </span><span> ') + ' </span>';
}
});
// Remove any empty spans that were added
h1.find('span').hide().each(function() {
if( !$.trim(this.innerHTML) ) {
$(this).remove();
}
});
h1.show().find('span').each(function(i) {
$(this).delay(400 * i).fadeIn(600);
});
Я не эксперт, но, возможно, вы слишком много думаете об этом. Как насчет:
var fadeWordsIn = function(elem$) {
var txt = elem$.text().split(' ');
elem$.empty();
var pushIt = function() {
if (txt.length) {
var word = txt.shift();
var span$ = $("<span>" + word + " </span>");
elem$.append(span$);
span$.hide().fadeIn(1000, pushIt);
}
};
pushIt();
};
вы хотите анимацию "BlockFadeIn by word" здесь:http://dev.seankoole.com/jquery/ui-effect/text.html
только что выпустили!