Не работает скрол в мобильных устройствах.

veleg
На сайте с 30.01.2011
Offline
142
2357

Не работает подгрузка контента на мобильниках.

var limitVal = 30;
var perScroll = 30;
$( window ).scroll(function() {
if ($(document).height() - $( window ).height() == $( window ).scrollTop()) {
limitVal+=perScroll;
$("#limit").val(limitVal);
updateEmployees();

}
});

И запрос ajax

...
success: function(records){
if (limitVal==30)
$('#employees tbody').html(makeTable(records));
else
$('#employees tbody').append(makeTable(records));
}

Докручиваю также как и через десктоп до самого низа, а новый контент не подгружается.

Искал похожие примеры, но так как в js не особо, то не смог сопоставить найденное со своим кодом.

Прошу помощи.

Фигачу Телеграм-ботов ( https://teleg.run/veleg )
veleg
На сайте с 30.01.2011
Offline
142
#1

Никто не знает?

tommy-gung
На сайте с 22.11.2006
Offline
287
#2

телепатов нет. код бы весь выложили

Здесь не могла быть ваша реклама
V2
На сайте с 21.06.2013
Offline
47
#3

попробуйте так

if ($(document).height() - $( window ).height() <= $( window ).scrollTop())

veleg
На сайте с 30.01.2011
Offline
142
#4
vl273:
попробуйте так
if ($(document).height() - $( window ).height() <= $( window ).scrollTop())

Афигеть. Вы монстр.

На телефоне заработало, только если со скоростью света скрол прокручивать. Если медленно, то нет.

V2
На сайте с 21.06.2013
Offline
47
#5

Сложно что-то сказать не видя картины в целом. Просто тот ответ был самым очевидным.

Можете скинуть ссылку на эту страницу в личку. Будет время - посмотрю.

veleg
На сайте с 30.01.2011
Offline
142
#6
vl273:
Сложно что-то сказать не видя картины в целом. Просто тот ответ был самым очевидным.
Можете скинуть ссылку на эту страницу в личку. Будет время - посмотрю.

blogcode.ru

В личку кидать не стал, чтоб не докучать лишний раз.

V2
На сайте с 21.06.2013
Offline
47
#7

И узрел он код. И содрогнулся он. И наполнилось его сердце скорбью.

Потестил на мобиле в хроме. Проблема в следующем: на мобиле $(document).height() вычисляется мягко говоря странно. Причем, в горизонтальном и вертикальном положении устройства, в одном и том же браузере, цифры сильно разные.

Если в двух словах, то $( window ).scrollTop() на мобиле значительно меньше $(document).height() - $( window ).height().

В данном конкретном случае можно закостылить так: if ($(document).height() - $( window ).height() - 200 <= $( window ).scrollTop()), и будет работать. Но и в десктопе запрос к серверу будет срабатывать чуть раньше, хотя пользователь разницы и не заметит.

Однако мое имхо, если оно Вам интересно, то это мягко говоря неправильный подход. Зачем дергать каждый раз сервер? При большом количестве записей в БД, ответ будет приходить достаточно долго, плюс это нагрузка на сервер. Я бы с сервера отдавал все данные сразу, а на стороне клиента уже сделал все свистелки, перделки и сортировки с подгрузками. В Вашем случае могла бы подойти библиотека jqueryDataTables. Понятно, что из коробки она работает иначе, но при помощи небольшого напилинга, функционал вполне можно сделать аналогичным Вашему. При этом вся работа будет переложена на сторону клиента.

veleg
На сайте с 30.01.2011
Offline
142
#8
vl273:
И узрел он код. И содрогнулся он. И наполнилось его сердце скорбью.

Потестил на мобиле в хроме. Проблема в следующем: на мобиле $(document).height() вычисляется мягко говоря странно. Причем, в горизонтальном и вертикальном положении устройства, в одном и том же браузере, цифры сильно разные.
Если в двух словах, то $( window ).scrollTop() на мобиле значительно меньше $(document).height() - $( window ).height().
В данном конкретном случае можно закостылить так: if ($(document).height() - $( window ).height() - 200 <= $( window ).scrollTop()), и будет работать. Но и в десктопе запрос к серверу будет срабатывать чуть раньше, хотя пользователь разницы и не заметит.

Однако мое имхо, если оно Вам интересно, то это мягко говоря неправильный подход. Зачем дергать каждый раз сервер? При большом количестве записей в БД, ответ будет приходить достаточно долго, плюс это нагрузка на сервер. Я бы с сервера отдавал все данные сразу, а на стороне клиента уже сделал все свистелки, перделки и сортировки с подгрузками. В Вашем случае могла бы подойти библиотека jqueryDataTables. Понятно, что из коробки она работает иначе, но при помощи небольшого напилинга, функционал вполне можно сделать аналогичным Вашему. При этом вся работа будет переложена на сторону клиента.

А если записей например миллион. Он весь этот миллион загрузит и будет обрабатывать на стороне клиента?

veleg
На сайте с 30.01.2011
Offline
142
#9
vl273:

В данном конкретном случае можно закостылить так: if ($(document).height() - $( window ).height() - 200 <= $( window ).scrollTop()), и будет работать. Но и в десктопе запрос к серверу будет срабатывать чуть раньше, хотя пользователь разницы и не заметит.

Открывается не по 30, а сразу всю выборку.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий