Я работаю над созданием бесконечной функции прокрутки для страницы, и я $( window).scroll()
с проблемой, когда кажется, что функция $( window).scroll()
дважды. Я видел похожие вопросы в stackoverflow, но они, похоже, связаны с быстрыми прокрутками и не имеют возможности проверить погоду, запрос уже отправлен. Вот код, с которым я сейчас работаю, я полагаю, что его что-то легкое, что я здесь отсутствует.
var loading = false;
var scrollcount = 0;
$( window ).scroll( function(){
scrollcount++;
var scrolling = $( document ).scrollTop();
var position = $( "#ajax-load" ).offset();
if( scrolling + $( window ).height() > position.top - 200 && loading == false ){
console.log( loading ); //returns 2 falses
console.log( scrollcount ); //returns 2 of the same number
console.log( $( document ).scrollTop() ); //returns same number
loading = true;
$( "#ajax-load" ).css( "display", "block" );
$.get( "url/to/my/script", info )
.done( function( data ){
//here where the items are appended to the document
setTimeout( function(){
loading = false;
}, 5000 );
});
}
});
Лицо, что, когда я выхожу из переменной scrollcount и возвращаюсь из scrollTop(), я получаю тот же номер дважды, кажется, говорит мне, что событие действительно срабатывает дважды в то же время по какой-то причине. Кажется, что если бы он стрелял дважды, один за другим, то для переменной загрузки была бы установлена ложь, а не огонь второй раз. Как я уже сказал, я думаю, что это нечто простое, что мне не хватает. Спасибо за вашу помощь!
Мое первое предположение: у вас есть приемник событий, применяемый дважды, где бы он ни находился.
Попробуйте добавить $ (window).unbind('scroll'); перед $ (window).scroll
Переменная загрузки будет ложной, если она срабатывает дважды, потому что false установлен в таймаут после асинхронного вызова
var timeout;
$(window).scroll(function() {
clearTimeout(timeout);
timeout = setTimeout(function() {
// do your stuff
}, 50);
});
Используйте этот код.