Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Бесконечная прокрутка (https://javascript.ru/forum/events/43486-beskonechnaya-prokrutka.html)

Simones 07.12.2013 15:41

Бесконечная прокрутка
 
Приветствую Вас !
Столкнулся с такой проблемой, что при функциях
$(document).scroll(function () {

//Здесь условие выполнения - скролл = 0.
//Подгрузка следующей страницы

});


или

setInterval(function () {

//Здесь условие выполнения - скролл = 0.
//Подгрузка следующей страницы

}, 500); //1000, 100 - одинаково


действие "подгрузки" выполняется неоднократно (2, иногда 3-4 раза) причем с интервалом в ~10-20ms, даже если интервал > 500.
Подскажите, пожалуйста, в какую сторону "копать", чтобы подгружало только один раз ?

cyber 07.12.2013 16:31

Simones, может просто сделать булевую переменную которую делать true если начата загрузка и по окончанию загрузки делать ее false?

Simones 07.12.2013 16:43

Я уже по-разному "извращался": и делал переменную true\false загрузки, и цикличное обращение к ф-и через setTimeout (методом рекурсии, кажется), но результат тот же.

Я дошел до того, что нужно как-то сделать прерывания: т.е. следующее событие выполнение подгрузки при скролле 0 должно выполнятся ч-з N-нный интервал, но реализовать это я так и не смог...
Но если сделать под функции, то получается вообще "порнография" и повтор уже не несколько раз, а около 8-10.
$(document).scroll(function () {
   setInterval(function () {
//Действие
   },500);
)};

danik.js 07.12.2013 17:38

Работай в направлении первого варианта. Ни setTimeout, ни уж тем более setInterval тебе не нужны.

Simones 07.12.2013 23:50

Всем спасибо ! Решил с помощью булевой переменной и таймаута. Уверен, что кому-то пригодится:
var load = false;
$(document).scroll(function () {
if(load == false) {
load = true;
  setTimeout(function () {
    load = false;
  }, 500);
}
});

danik.js 08.12.2013 00:38

А почему блокируешь именно на пол секунды? Разве по логике не до момента завершения подгрузки нужно? Ну и положение прокрутки я думаю ты тоже проверяешь, верно?

cyber 08.12.2013 01:07

danik.js, потому что походу тестирует на локальном хосте)


Часовой пояс GMT +3, время: 11:32.