22.10.2014, 23:52
|
Аспирант
|
|
Регистрация: 01.06.2014
Сообщений: 33
|
|
как добавить класс элементам с определенным интервалом
всем привет. передо мной стоит следующая задача.
к примеру есть несколько параграфов с определенным классом.
нужна функция, которая будет добавлять всем этим параграфам второй класс с определенным интервалом. то есть, страница загрузилась, через секунду добавился класс к первопу <p>, потом через секунду ко второму <p> и т.д.
Я использовал классы из учебника Флэнагана для добавления классов.
http://jsfiddle.net/az8oaswb/1/
вот то, что у меня получилось, но к сожалению классы добавляются сразу, без интервала. подскажите, в чем может быть проблема?
ps мне кажется здесь нужна именно функция setTimeout(), чтобы класс добавлялся на каждой итерации цикла.
Последний раз редактировалось Smike, 22.10.2014 в 23:59.
|
|
23.10.2014, 00:50
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
<style>
.red {
color: red;
}
</style>
<p class="hello">Lorem ipsum dolor sit amet, consectetur</p>
<p class="hello">Sapiente in delectus dolorem reiciendis ditii</p>
<p class="hello">Quis dolore autem voluptatibus repellat</p>
<script>
function next(len) {
var i = -1;
return function () {
i++;
return i == len ? -1: i;
};
}
var allP = document.querySelectorAll('p.hello'),
pos = next(allP.length),
current,
timer = setInterval(function () {
current = pos();
if (current == -1) {
clearInterval(timer);
} else {
allP[current].className += ' red';
}
}, 2000);
</script>
Последний раз редактировалось Vlasenko Fedor, 23.10.2014 в 01:11.
|
|
23.10.2014, 01:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
<style>
.red {
color: red;
}
</style>
<p class="hello">Lorem ipsum dolor sit amet, consectetur</p>
<p class="hello">Sapiente in delectus dolorem reiciendis ditii</p>
<p class="hello">Quis dolore autem voluptatibus repellat</p>
<script>
var p,
timer = setInterval(function () {
p = document.querySelector('p.hello:not(.red)');
p ? p.classList.add('red') : clearInterval(timer)
}, 2000);
</script>
|
|
23.10.2014, 01:52
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
рони в своем примере ты каждую итерацию ищешь элементы в DOM
я же делаю это один раз этим мой пример лучше
|
|
23.10.2014, 02:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Poznakomlus,
да да одна функция next чего стоит
|
|
23.10.2014, 10:47
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
<style>.red {color: red}</style>
<p class="hello">Lorem ipsum dolor sit amet, consectetur</p>
<p class="hello">Sapiente in delectus dolorem reiciendis ditii</p>
<p class="hello">Quis dolore autem voluptatibus repellat</p>
<script>
(function (nameClass, addThis) {
var classes = document.getElementsByClassName(nameClass);
for(var i = 0; i < classes.length; i++) {
setTimeout(addClass.bind(false, classes[i], addThis), i*2000 + 2000);
}
})("hello", "red");
function addClass(o, c){
var re = new RegExp("(^|\\s)" + c + "(\\s|$)", "g")
if (re.test(o.className)) return
o.className = (o.className + " " + c).replace(/\s+/g, " ").replace(/(^ | $)/g, "");
}
</script>
Последний раз редактировалось BETEPAH, 23.10.2014 в 11:06.
|
|
23.10.2014, 12:24
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
|
|
23.10.2014, 12:48
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Poznakomlus
|
рони в своем примере ты каждую итерацию ищешь элементы в DOM
|
Каким хреном это проблема? Если код от этого короче и ясней - то зачем мудрить. Одно фигово - :not() не работает в IE8.
BETEPAH, твой getByClassName тоже в IE8 не работает ) И тем более .bind()
__________________
В личку только с интересными предложениями
|
|
23.10.2014, 13:24
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от danik.js
|
Каким хреном это проблема?
|
Сообщение от danik.js
|
Одно фигово - :not() не работает в IE8
|
А еще возьми так 10000 парагрофов и прйдись по ним каждую итерацию
|
|
23.10.2014, 13:41
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Poznakomlus
|
А еще возьми так 10000 парагрофов и прйдись по ним каждую итерацию
|
Ок:
<body>
<script>var p = document.createElement('p');
p.className = 'hello red';
for (var i = 0; i < 999;i++) {
document.body.appendChild(p.cloneNode(false));
}
p.className = 'hello';
document.body.appendChild(p);
var t = new Date();
p = document.querySelector('p.hello:not(.red)');
alert(new Date() - t);
</script>
</body>
Сколько мс у тебя тратится? UI тормозит ?
__________________
В личку только с интересными предложениями
|
|
|
|