Виджеты стадного инстинкта
Добрый день. Я сделал блоки div содержания, типа "Ирина только что купила пылесос", "Федя купил самовар" и тд.
<div class="widget widget__bg"> <div class="widget__img"> <img src="/img/basket.svg" alt=""> </div> <div class="widget__txt"> <div><span class="widget__date">14.12.18</span> / <span class="widget__time">16:39</span></div> Дмитрий, г.Томск <br> Заказала 2 парника </div> </div> Мне нужно, чтобы эти divы появлялись в рандомный промежуток времени. Ну типа симулятор покупок. Я вот сделал
$(function() {
var p = $(".widget"),
len = p.length,
indx = 0;
setInterval(function(){
setTimeout(function(){
! function go() {
p.eq(indx).fadeIn("slow", function() {
$(this).delay(2000).fadeOut("slow", go)
});
indx = ++indx % len
}()
},2000);
},8000);
});
Но чет эффект не тот). И интервал постоянно один и тот же, и после одного прогона, потом начинаются тупники. Что не так? |
Для чего у вас таймаут в интервале?
Зачем callback таймаута еще в функцию заворачивать? |
Спасибо за ответ. Да, действительно. Убрал лишнее
$(function() {
var p = $(".widget"),
len = p.length,
indx = 0;
setInterval(
! function go() {
p.eq(indx).fadeIn("slow", function() {
$(this).delay(2000).fadeOut("slow", go)
});
indx = ++indx % len
}(),8000);
});
Все нормально работает, равномерно. Но как теперь сделать появление этого всего в разный промежуток времени? Ну типа первый появился б в 3 секунду, второй в 8, 3 в 1 и тд.? |
Вы знаете, зачем у вас в коде восклицательный знак перед функцией go и круглые скобочки после нее?
Удалите их. Интервал можно заменить на таймаут. |
Извиняюсь, но нет, я код с интернета нарыл. Ммм... А зачем, если не секрет?)
|
Чтобы функция сама себя исполняла, как я понял
|
И знак вопрос, и скобочки сразу вызовут функцию, в итоге интервалу, как callback будет передан !undefined=true.
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
$(function() {
var p = $(".widget"),
len = p.length,
indx = 0;
setTimeout(function go() {
p.eq(indx).fadeIn("slow", function() {
$(this).delay(2000).fadeOut("slow");
});
indx = ++indx % len
setTimeout(go, getRandomInt(5, 10) * 1000);
}, getRandomInt(5, 10) * 1000);
});
|
:write: setTimeout это лишнее
|
Все отлично отрабатывает, только после нескольких прогонов вначале. Он начинает их быстро листать, а потом вроде хорошо, как надо и с разным промежутком. Что б это могло быть?
|
рони, без него функция отработает сразу после загрузки.
|
| Часовой пояс GMT +3, время: 00:32. |