Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2022, 03:25
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Отложенная загрузка контента через div Ajax'ом
Приветствую!
На странице есть контент, который разделен на несколько блоков, заключённых в div, имеющих свой class.
После первой загрузки страницы? часть блоков, которые видимы, грузятся Ajax'ом сразу, а остальные блоки, которые находятся за пределами экрана, не должны загружаться.
Остальные блоки должны подгружаться по мере видимости при прокрутке скролла вниз или вверх, в зависимости на каком уровне просмотра перезагрузили страницу или открыли новую страницу, заранее за 50px..

В интернетах ничего хорошего не нашел, только плагины для jQuery, но это не подходит, слишком много для этой задачи.
Хотелось бы небольшой скрипт на javascript, для решения.

Например:
в шаблоне есть div
<div id="guesslike_div"></div>


Применяю такой код:
//Подгружает контент внутри div #guesslike_div, если скроллят страницу и элемент попадает в область видимости
	$(document).ready(function(){
		$(window).scroll(function() {
			//check if your div is visible to user
			if ($(window).scrollTop() + $(window).height() >= $('#guesslike_div').offset().top) {
				if(!$('#guesslike_div').attr('loaded')) {
					//not in ajax.success due to multiple sroll events
					$('#guesslike_div').attr('loaded', true);				
					$('#guesslike_div').load("/get_guesslike.html", function(){
						$(this).show();
					});					
				}
			}
		});
	});


Но работает этот код нестабильно.
При первой загрузке, если блок
<div id="guesslike_div"></div>
в области видимости, то скрипт его не подгружает, а погружает только если немного прокрутить скролл.
А так же, если находишься внизу страницы и перезагрузить страницу, то все блоки, которые находятся в верхней части страницы, за пределами видимости, все загружаются, а так быть не должно, они должны быть в отложенной загрузке.

Можете исправить этот скрипт или предложите свой вариант?
Хорошим вариантом был бы один общий скрипт, который можно разместить внизу футера, и в div добавлять активный class, для активации функции отложенной загрузки для этого дива, а для вызов Ajax обернуть в функцию этого скрипта. У каждого div свой Ajax, который вызывает свой файл .html с контентом.
Заранее спасибо, откликнувшимся!

Последний раз редактировалось Vaska, 27.04.2022 в 04:24.
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2022, 07:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Vaska,
рыть в сторону IntersectionObserver, на форуме куча примеров.


можно почитать учебник
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка контента из файла по ID в зависимости от ID нажатой кнопки oldeuboi Элементы интерфейса 3 16.11.2018 07:33
Скрипт смены контента в Div keystation Events/DOM/Window 23 11.03.2016 16:17
Загрузка ajax'ом в определенный div Daniel93 AJAX и COMET 12 23.02.2015 01:06
Загрузка контента без перезагрузки страницы vah-smile AJAX и COMET 3 30.03.2011 16:37
Не получается загрузить баннер в раздел DIV методами Javascript через iframe ((( autobuh Общие вопросы Javascript 3 24.07.2009 19:24