Внимание JavaScript Gurus: нуждается в руке с SetInterval ()
-
27-09-2019 - |
Вопрос
Я пытаюсь сделать не интерактивный дисплей для окна магазина недвижимости.
Прошло некоторое время, так как я играл с setInterval()
.
Первый раз мой скрипт поступает, это нормально. Но когда он пытается получить следующую недвижимость через getNextProperty()
, это начинает идти на хайвире. Если у вас есть Firebug или эквивалентный выход console.log()
, Вы увидите, что это называет то, что это не должно!
Сейчас есть честный кусочек JavaScript, поэтому я буду чувствовать себя лучше связать с ним, чем публиковать все это.
Стоит отметить все мои DOM / AJAX сделано с jQuery.
Я старался как лучше, чтобы убедиться clearInterval()
Работает, и, похоже, не работает ни одного кода под ним.
То setInterval()
Используется для предварительной нагрузки следующего изображения, а затем отображать его в галерее. Когда интервал обнаруживает, что мы находимся на последнем изображении ((nextListItem.length === 0)
), это предназначено для того, чтобы очистить этот интервал и начать с новым свойством.
Давно ездил мне орехи, поэтому кто-нибудь может помочь мне?
Вероятно, что-то действительно очевидно!
Большое спасибо!
Обновлять
Ну, теперь я чувствую себя лучше узнать, что проблема была моей наиместительностью предположения, что плагины будут работать из коробки.
Я получил этот плагин от Ответ на переполнение стека. Отказ Я предупредил автор этого вопроса.
Спасибо за все ваши ответы!
Решение
Вот ваша проблема проблема:
jQuery.extend(jQuery, {
imagesToLoad: 0,
Проблема в том, что эта переменная является глобальной / совместноjQuery.imagesToLoad
), так что эта проверка позже:
if(jQuery.loadedImages.length >= jQuery.imagesToLoad){
Зависит от этого плагина, который не вызывается дважды в то же время, в противном случае, если проверка идет гайки, так как вы звоните позже в своем коде:
$.preloadImages({
urls: [nextImage],
Это количество капель до 1, делая if
оценивать true
Не только на последнем изображении, но все изображения после первого в наборах после первого (из-за выполнения обратного вызова он перекрывается во времени), что вызывает complete
Обратный вызов для пожара многие раз, не только один раз, так что этот код:
$.preloadImages({
urls: preloadImages,
complete: function() { showProperty(property); }
});
... видит это complete
Бег функции многие раз, поэтому вы начинаете многие интервалы одновременно (вот почему вы видите console.log('show property called' + property.slug)
Выполните так много раз в журнале).
Короткое исправление: заменить preloadImages
Код с версией, которая не использует глобальную переменную :)