2016-07-09 1 views
0

У меня есть плагин, который говорит мне, если элемент виден в окне просмотра с $('#element').visible() (устанавливается на true, если видимо).Предотвращение вызова ajax при прокрутке, когда уже вызвано

Теперь я хочу создать функцию, с помощью которой я просматриваю страницу и загружаю новый контент с помощью ajax. У меня это до сих пор:

window.onscroll = function() { 
    console.log($('#ele').visible()); 

    if ($('#ele').visible()) { 
       //ajax call comes here 
    } 

}; 

Как только я вижу элемент мой журнал показывает верно:

enter image description here

У меня нет проблем, реализующие Ajax-запрос сейчас, но не должен» t Я блокирую эту функцию только один раз? Как я могу предотвратить, что новый элемент, который уже загружен для загрузки снова (не используйте снова ajax)?

Я думал об использовании логической переменной, но моя проблема в том, что я не знаю, как это реализовать, потому что, если я задаю переменную, как браузер знал бы ее ценность? Потому что на каждом ходу моего колеса мыши он не может вспомнить, что такое ценность этой переменной?

EDIT:

Я попробовал код Измаила и он никогда не достигнет вызова Ajax (предупреждение не будет отображаться).

window.onscroll = function() { 
    var ajaxExecuted = false; 
    var ele = $('#load_more').visible(); 
    console.log(ele); 

    return function() { 
     if (ajaxExecuted) return; 

     if (ele) { 
      alert("OK"); 
      var ajaxArray; 
      ajaxArray = { page: 2 } 
      ajaxLoadContent(ajaxArray, "load_more", "ajax_load"); 
      ajaxExecuted = true; 
     } 
    } 
}; 

ответ

1

Вы можете использовать это:

window.onscroll = (function() { 
    var ajaxExecuted = false; 
    return function() { 
     if(ajaxExecuted) return; 

     if ($('#ele').visible()) { 
       $.ajax({...}).success(function() { 
        //Your code here; 
        ajaxExecuted = true; 
       }); 
     } 
    } 
})(); 
+0

Спасибо за ваш ответ. Я попробую это сейчас. Мой вопрос о том, как браузер знает, что значение переменной ajaxExecuted? Я имею в виду, каков фоновой процесс шаг за шагом точно? – AlexioVay

+0

Итак, я пробовал это, но код никогда не заканчивается 'if (ajaxExecuted) return;' потому что после этого он равен true? – AlexioVay

+0

Внешняя функция - это выражение «Вызванное сразу выражение», которое возвращает функцию (обработчик события). Обработчик события будет выполняться внутри области функций IIFE, где доступно 'ajaxExecuted'. –

1

Одно простое решение: установите значение boolean в true, когда элемент сначала станет видимым и установите значение false, когда оно перестает быть видимым. Только запускайте запрос, если эти состояния не совпадают (т. Е. Если он виден, но логическое значение ложно), это означает, что вы впервые видели это окно. Затем вы установите bool, чтобы он больше не срабатывал, пока он исчезает и снова появляется).

+0

Моя проблема заключается в том, что я не знаю, как осуществить это, потому что если я установить переменную, как бы браузер знаю, что это значение, потому что на каждом движении моего колесика мыши это не помните, что такое значение переменной? – AlexioVay

+0

Вы уже пробовали? Если я не схожу с ума, вы должны создать один над объявлением своей функции и установить его в false, а затем изменить его в функции. –

+0

Я обновил свой вопрос, используя код Ismail. Может быть, вы тоже можете мне помочь? – AlexioVay

 Смежные вопросы

  • Нет связанных вопросов^_^