как добавить класс элементам с определенным интервалом
всем привет. передо мной стоит следующая задача.
к примеру есть несколько параграфов с определенным классом. нужна функция, которая будет добавлять всем этим параграфам второй класс с определенным интервалом. то есть, страница загрузилась, через секунду добавился класс к первопу <p>, потом через секунду ко второму <p> и т.д. Я использовал классы из учебника Флэнагана для добавления классов. http://jsfiddle.net/az8oaswb/1/ вот то, что у меня получилось, но к сожалению классы добавляются сразу, без интервала. подскажите, в чем может быть проблема? ps мне кажется здесь нужна именно функция setTimeout(), чтобы класс добавлялся на каждой итерации цикла. |
<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> |
:write:
<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> |
рони в своем примере ты каждую итерацию ищешь элементы в DOM
я же делаю это один раз этим мой пример лучше :dance: |
Poznakomlus,
да да одна функция next чего стоит :) |
<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> |
Цитата:
<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 allP = document.querySelectorAll('p.hello'), len = allP.length, i = 0, timer = setInterval(function () { if (len--) { allP[i++].className += ' red'; } else { clearInterval(timer); } }, 2000); </script>:) |
Цитата:
BETEPAH, твой getByClassName тоже в IE8 не работает ) И тем более .bind() |
Цитата:
Цитата:
|
Цитата:
<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 тормозит ? :) |
Часовой пояс GMT +3, время: 00:25. |