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)];
Используйте 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);
Вам необходимо использовать:
setInterval(//insert your function and interval here)
Это решит проблему "выполнить только один раз".
Что касается желания получить разные значения randClass, вам нужно это сделать, сделайте то, что изменяет значение randClass, между интервалами, в соответствии с вашими потребностями. Как предложил @Ланелло, вы можете рандомизировать его. Или, возможно, увеличить его. Независимо от того, что диктует ваша прикладная логика.
Попробуй это:
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>');
}
вы просто должны написать
function RandomizeClass()
и назовите его внутри SetTimeout, вместо того, чтобы записывать его внутри, наверняка вы установите значение randClass перед setTimeout, а затем его значение никогда не изменится.
setInterval