Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2018, 14:06
Интересующийся
Отправить личное сообщение для noreset Посмотреть профиль Найти все сообщения от noreset
 
Регистрация: 29.04.2017
Сообщений: 12

Виджеты стадного инстинкта
Добрый день. Я сделал блоки 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);
});


Но чет эффект не тот). И интервал постоянно один и тот же, и после одного прогона, потом начинаются тупники. Что не так?
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2018, 14:10
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Для чего у вас таймаут в интервале?
Зачем callback таймаута еще в функцию заворачивать?
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2018, 14:19
Интересующийся
Отправить личное сообщение для noreset Посмотреть профиль Найти все сообщения от noreset
 
Регистрация: 29.04.2017
Сообщений: 12

Спасибо за ответ. Да, действительно. Убрал лишнее
$(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 и тд.?
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2018, 14:22
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Вы знаете, зачем у вас в коде восклицательный знак перед функцией go и круглые скобочки после нее?
Удалите их.

Интервал можно заменить на таймаут.
Ответить с цитированием
  #5 (permalink)  
Старый 17.12.2018, 14:24
Интересующийся
Отправить личное сообщение для noreset Посмотреть профиль Найти все сообщения от noreset
 
Регистрация: 29.04.2017
Сообщений: 12

Извиняюсь, но нет, я код с интернета нарыл. Ммм... А зачем, если не секрет?)
Ответить с цитированием
  #6 (permalink)  
Старый 17.12.2018, 14:26
Интересующийся
Отправить личное сообщение для noreset Посмотреть профиль Найти все сообщения от noreset
 
Регистрация: 29.04.2017
Сообщений: 12

Чтобы функция сама себя исполняла, как я понял
Ответить с цитированием
  #7 (permalink)  
Старый 17.12.2018, 14:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

И знак вопрос, и скобочки сразу вызовут функцию, в итоге интервалу, как 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);
});

Последний раз редактировалось Nexus, 17.12.2018 в 14:49.
Ответить с цитированием
  #8 (permalink)  
Старый 17.12.2018, 14:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

setTimeout это лишнее
Ответить с цитированием
  #9 (permalink)  
Старый 17.12.2018, 14:44
Интересующийся
Отправить личное сообщение для noreset Посмотреть профиль Найти все сообщения от noreset
 
Регистрация: 29.04.2017
Сообщений: 12

Все отлично отрабатывает, только после нескольких прогонов вначале. Он начинает их быстро листать, а потом вроде хорошо, как надо и с разным промежутком. Что б это могло быть?
Ответить с цитированием
  #10 (permalink)  
Старый 17.12.2018, 14:47
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

рони, без него функция отработает сразу после загрузки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парни помогите!!! Виджеты!! AsceticTr Элементы интерфейса 1 03.09.2015 09:35
Инкапсулировать социальные виджеты. SliceCall Общие вопросы Javascript 0 05.11.2013 12:58