Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.06.2020, 00:44
Интересующийся
Отправить личное сообщение для begovik Посмотреть профиль Найти все сообщения от begovik
 
Регистрация: 09.02.2019
Сообщений: 22

Неявная ошибка скрола
Зравствуйте! Много расписывать не буду, т.к. надеюсь, что для pro-программеров эта строчка будет понятной. Если же нет - буду тогда сам разбираться.

Значит, когда пользователь доскроливает до низа документа, AJAX-ом вызывается уже php-скрипт. И тут всё работает. Но мне нужно, чтобы скрипт вызывался, когда до низа остаётся ещё 60px, и когда я эти 60 подставляю, то php-скрипт вызывается сразу трижды
Так в чём же причина?

Корректная версия:
if ($(window).scrollTop() + $(window).height() >= $(document).height()) {


А вот не корректная:
if ($(window).scrollTop() + $(window).height() + 60 >= $(document).height()) {
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2020, 07:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

begovik,
скролл это пулемёт, за 60 пикселей успевает выстрелить 3 раза и более, ставьте флаг что ушли на сервер и не запускайте повторно запрос, пока не получите ответ.
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2020, 11:19
Интересующийся
Отправить личное сообщение для begovik Посмотреть профиль Найти все сообщения от begovik
 
Регистрация: 09.02.2019
Сообщений: 22

Да, примерно так я себе это и представлял. У меня в коде подобный флаг устанавливается, но видимо не в том месте. Спасибо, что направили в нужную сторону.
Ответить с цитированием
  #4 (permalink)  
Старый 06.06.2020, 04:12
Интересующийся
Отправить личное сообщение для begovik Посмотреть профиль Найти все сообщения от begovik
 
Регистрация: 09.02.2019
Сообщений: 22

Ужас, никак не выходит, я уже всю голову об стену разбил!
Подскажите пожалуйста, кто знает как сделать, чтоб корректно заработало.
При прокрутке до низа должна подгружаться партия товаров, а они подгружаются все, потому что происходит несколько обращений, хотя флаг (busy) на время выполнения обращения к серверу установлен.
Выкладываю полностью функцию:
$(document).ready(function(){
    if ($(".main-container").hasClass("catalog-page")) {
        let  scrollFrom = 0, busy = false, category;
        $(window).scroll(function(){
        	if ( $(window).scrollTop() > scrollFrom ) {

	        	$('#toTop').html($(window).scrollTop() + $(window).height()+'\r\n'+$(document).height());
	            if ($(document).height() - 60 <= $(window).scrollTop() + $(window).height() && !busy) {
	                category = $('.catalog h1').text();
	                $.ajax({
	                    url: "ajax.php",
	                    type: "post",
	                    data: {"showmore": category},
	                    dataType: "html",
	                    beforeSend: function () { busy = true; }
	                }).done(function (data) {
	                	console.log(data);
	                	console.log($('.no-products').length);
	                    if (data != 0 || data != '0') {
	                        $("#main-catalog").show(500, function() {
	                            $("#main-catalog").append(data);
	                        });
	                    } else if (!$('.no-products').length) {
	                        $("#main-catalog").show(500, function() {
	                            $("#main-catalog").append('<div class="col-12 no-products"> <h5 class="endoc">Нет товаров для показа.</h5> </div>');
	                        });
	                    }
	                });
	                busy = false;
	            }
	            // console.log(flag);

	        }scrollFrom = $(window).scrollTop();
        });
    }
});
Ответить с цитированием
  #5 (permalink)  
Старый 06.06.2020, 13:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от begovik
хотя флаг (busy) на время выполнения обращения к серверу установлен.
!!! перенесите строку 29 в ответ сервера, в начало строки 28.
Ответить с цитированием
  #6 (permalink)  
Старый 06.06.2020, 14:18
Интересующийся
Отправить личное сообщение для begovik Посмотреть профиль Найти все сообщения от begovik
 
Регистрация: 09.02.2019
Сообщений: 22

Спасибо, рони, всё заработало, ОЧЕНЬ вам благодарен, вы даже не представляете насколько!
Пойду посплю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка с объектом в IE Georrg Internet Explorer 3 15.05.2015 19:43
firebug пишет ошибка invalid range in character class Dim@ Общие вопросы Javascript 5 10.05.2012 16:52
ошибка toLocaleTimeString zolboch Общие вопросы Javascript 2 15.11.2011 01:51
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
IE: неизвестная ошибка выполнения _Kpot_ Internet Explorer 1 03.04.2008 11:00