2013-05-28 3 views
1

У меня есть этот код для загрузки данных. Когда пользователь прокручивает более половины экрана, он продолжает загружать данные и добавлять HTML в документ. The problem is $(window).height() doesn't update on the fly after HTML changes поэтому выражение условия идет не так. Как это исправить?

// Check scrollbar is down a half. 
$(window).scroll(function() { 
    console.log("flag: " + flag);  
    console.log($(window).scrollTop()); 
    console.log($(window).height()); 

    if (($(window).scrollTop() > $(window).height()/2)) { 
     if(flag == 0) { 
      console.log("Load data"); 
      loadData(globalIndex, globalCount); 
      globalIndex += 40; 
     } 
     flag = 1; 

    } else { 
     flag = 0; 
    } 
}); 
+0

Попробуйте этот плагин: https://gist.github.com/elclanrs/5514942. Вы можете установить «смещение» и множество других параметров, и это похоже на 1k. – elclanrs

+0

Я думаю, может быть, вы хотите '$ (document) .height()' – Barmar

+0

Кстати, трюк здесь: 'endOfPage = $ (doc) .height() - $ (win) .height(); if ($ (win) .scrollTop()> = endOfPage - offset) ' – elclanrs

ответ

1
$(window).height() 

даст вам высоту браузера (который является постоянным, если вы измените размер окна). Попробуйте использовать:

$(document).height() - ($(window).height()/2); 

вместо ...

2

Высота окна не изменится, если не изменить размер экрана браузера. Проблема с вашей формулой заключается в том, что для ее работы вам нужно будет загрузить достаточно данных, чтобы переместить панель прокрутки назад выше средней точки. Если вы этого не сделаете, эта формула будет постоянно возвращать true, и вы будете называть loadData намного больше, чем вам нужно.

Как потенциальное обходное решение (в зависимости от того, сколько времени требуется для загрузки ваших данных), вы можете вызвать loadData, как только полоса прокрутки достигнет нижней части вашего окна. Это условие будет выполняться гораздо реже, чем ваш текущий, и он будет загружать только данные, если ваш пользователь пытается его просмотреть. Если загрузка данных быстро, то это простое решение. Если это процесс с интенсивным временем, и именно по этой причине вы выбрали загрузку данных после того, как вы попали на полпути, тогда рассмотрите возможность загрузки большего количества данных за раз и в том числе прядильщика или какой-либо другой визуальной подсказки, чтобы сообщить пользователю, что данные погрузка.

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