Модификация схожих элементов по временному интервалу
У меня есть заданный список p элементов в моем HTML-коде. При загрузке страницы я пытаюсь ставить в очередь модификации каждого <p>
содержание элементов за заданный интервал времени (1сек).
Учитывая HTML:
<p>I want to change first!</p>
<p>I want too!</p>
<p>Me 3rd !</p>
<p>Hey, don't forget me!</p>
CSS:
p { padding: 2px 5px 0px 10px; }
.p { color: #999; }
.green { color:green; border-bottom: 1px solid #888; background: #EEE; }
Каким должен быть JS, так как я хочу связать модификацию. Буквально: первое p-предложение должно быть сначала изменено CSS / HTML, 1 секунда позже, 2-я строка должна быть заменена, 1 секунда позже 3-й строки, 4 секунды позже 4-й строки и т. Д.
$("p").ready(function(){
setInterval(function () {
$('p').text('aaaahhhhh.... happy!')
}, 1000);
});
Что я делаю не так? я должен использовать для цикла, each(), а не selector + setInterval? Пожалуйста, перешлите ключевые слова, чтобы я мог найти соответствующие документы. Скрипка ценит ~
4 ответа
function modifyTargetDeferred(target) {
target.first().text('ahhh... happy');
if (target.length > 1) {
setTimeout(function() {
modifyTargetDeferred(target.not(':first'));
}, 1000);
}
}
setTimeout(function() {
modifyTargetDeferred($('p'));
}, 1000);
Попробуй это
$(document).ready(function(){
var st=null;
var i=0;
st=setInterval(function () {
$('p').eq(i).text('aaaahhhhh.... happy!');
if(i==$('p').length-1)// one less because i initialised by 0.
clearTimeout(st);
i++
}, 1000);
});
Проверьте живую демо здесь http://jsfiddle.net/gT3Ue/14/
(function next($set, i) {
setTimeout(function () {
$set.eq(i).text('aaaahhhhh.... happy!');
if (i < $set.length - 1) {
next($set, i + 1);
}
}, 1000);
// /\
// ||------ the delay
}($('p'), 0));
// /\ /\
// || ||-- the starting index
// ||----- -- your set of elements
Ваш интервал работает, добавьте вместо текста, чтобы увидеть эффект. использование document.ready
не $("p").ready
$(document).ready(function(){
setInterval(function () {
$('p').append('aaaahhhhh.... happy!')
}, 1000);
});
i = 0;
$(document).ready(function () {
div1 = $('#div1');
parry = $("p");
setInterval(function () {
div1.append(parry.eq(i++).text() + '<br />')
if (i > 3) i = 0;
}, 400);
});