Spędziłem trochę czasu, próbując znaleźć fajną funkcję do pakowania rozwiązania. W każdym razie skończyło się na tym, co uważam za lepsze rozwiązanie podczas ładowania wielu treści na jednej stronie lub w całej witrynie.
Funkcjonować:
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;
}
}
Możesz wtedy wywołać funkcję za pomocą okna przy przewijaniu (na przykład możesz również powiązać ją z kliknięciem itp., Tak jak ja też to robię, stąd funkcja):
Używać:
$(window).scroll(function (event) {
ifViewLoadContent("#AjaxDivOne", "someFile/somecontent.html");
ifViewLoadContent("#AjaxDivTwo", "someFile/somemorecontent.html");
});
To podejście powinno również działać w przypadku przewijanych elementów div itp. Mam nadzieję, że pomoże, w powyższym pytaniu możesz użyć tego podejścia do ładowania treści w sekcjach, może dołączać i tym samym dryblować wszystkie dane obrazu, a nie zbiorczy kanał.
Zastosowałem to podejście, aby zmniejszyć obciążenie na https://www.taxformcalculator.com . Nie udało się, jeśli spojrzysz na stronę i sprawdzisz element itp., Możesz zobaczyć wpływ na ładowanie strony w Chrome (jako przykład).
new_element.hide().appendTo('.your_div').fadeIn(); $(window).scrollTop($(window).scrollTop()-1);
Pierwsza linia ładnie dołącza elementy, druga zapewnia, że twoja funkcja nigdy nie zatrzymuje się na dole strony.