Добавить цикл в setTimeout

0

JS:

setTimeout(function() {
    $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>');

}, 2000);

Но раз. Я хочу цикл. Как я могу это исправить?

var house = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
randClass = house[Math.floor(Math.random() * house.length)];
  • 0
    Попробуй setInterval
Теги:

4 ответа

3

Используйте setInterval вместо setTimeout. Первый устанавливает таймер, который вызывается на интервале, тогда как позднее устанавливает таймер, который вызывается только один раз.

Кроме того, каждый раз, когда вы изменяете DOM, вызывайте код рандомизации. Легкий способ сделать это - включить его в функцию интервалов следующим образом:

setInterval(function() {
    var house = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    var randClass = house[Math.floor(Math.random() * house.length)];

    $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>');
}, 2000);
  • 0
    Да, это работает. Но получите то же значение randClass. Я хочу изменить каждый setInterval.
  • 0
    @ user3099199, поэтому установите новое значение randClass внутри интервала ...
Показать ещё 4 комментария
2

Вам необходимо использовать:

setInterval(//insert your function and interval here)

Это решит проблему "выполнить только один раз".

Что касается желания получить разные значения randClass, вам нужно это сделать, сделайте то, что изменяет значение randClass, между интервалами, в соответствии с вашими потребностями. Как предложил @Ланелло, вы можете рандомизировать его. Или, возможно, увеличить его. Независимо от того, что диктует ваша прикладная логика.

  • 0
    Да, это работает. Но получите то же значение randClass. Я хочу изменить каждый setInterval.
  • 0
    Ну, вы должны быть уверены, что значение randClass изменяется между интервалами. Что такое randClass и откуда он? Возможно, вы могли бы добавить код, чтобы прояснить это в вашем вопросе?
0

Попробуй это:

var intv = setInterval(test, 2000);
// you can also clear the interval 
// by use clearInterval(intv);
function test(){
   $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>');
}
0

вы просто должны написать

function RandomizeClass()

и назовите его внутри SetTimeout, вместо того, чтобы записывать его внутри, наверняка вы установите значение randClass перед setTimeout, а затем его значение никогда не изменится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню