Passei algum tempo tentando encontrar uma boa função para embrulhar uma solução. Enfim, acabei com isso que considero uma solução melhor ao carregar vários conteúdos em uma única página ou em um site.
Função:
function ifViewLoadContent(elem, LoadContent)
{
var top_of_element = $(elem).offset().top;
var bottom_of_element = $(elem).offset().top + $(elem).outerHeight();
var bottom_of_screen = $(window).scrollTop() + window.innerHeight;
var top_of_screen = $(window).scrollTop();
if((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)){
if(!$(elem).hasClass("ImLoaded")) {
$(elem).load(LoadContent).addClass("ImLoaded");
}
}
else {
return false;
}
}
Você pode chamar a função usando window on scroll (por exemplo, você também pode vinculá-la a um clique etc., como eu também faço, daí a função):
Usar:
$(window).scroll(function (event) {
ifViewLoadContent("#AjaxDivOne", "someFile/somecontent.html");
ifViewLoadContent("#AjaxDivTwo", "someFile/somemorecontent.html");
});
Essa abordagem também deve funcionar para rolar divs etc. Espero que ajude, na pergunta acima você pode usar essa abordagem para carregar seu conteúdo em seções, talvez acrescentar e assim driblar alimentar todos os dados de imagem em vez de alimentar em massa.
Usei essa abordagem para reduzir a sobrecarga em https://www.taxformcalculator.com . O truque acabou, se você olhar o site e inspecionar o elemento etc., poderá ver o impacto no carregamento da página no Chrome (como exemplo).
new_element.hide().appendTo('.your_div').fadeIn(); $(window).scrollTop($(window).scrollTop()-1);
primeira linha acrescenta elementos de maneira agradável, a segunda garante que sua função nunca pare na parte inferior da página.