Внимание JavaScript Gurus: нуждается в руке с SetInterval ()

StackOverflow https://stackoverflow.com/questions/3050111

  •  27-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь сделать не интерактивный дисплей для окна магазина недвижимости.

Прошло некоторое время, так как я играл с setInterval().

Первый раз мой скрипт поступает, это нормально. Но когда он пытается получить следующую недвижимость через getNextProperty(), это начинает идти на хайвире. Если у вас есть Firebug или эквивалентный выход console.log(), Вы увидите, что это называет то, что это не должно!

Сейчас есть честный кусочек JavaScript, поэтому я буду чувствовать себя лучше связать с ним, чем публиковать все это.

Дисплей магазина

Оскорбительный 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 Код с версией, которая не использует глобальную переменную :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top