Загрузка ajax, когда свиток достигает 80%

Мое дело: это не файл project.xcworkspace, это не папка Derived Data.

Я потратил много времени. Хуже, нет сообщения об ошибке. Никакой подсказки со стороны Xcode. Абсолютно потеряно.

Наконец, эта функция (с более чем 10 параметрами) отвечает.

func animationFrames(level: Float,
                     image: String,
                     frame0: String,
                     frame1: String,
                     frame2: String,
                     frame3: String,
                     frame4: String,
                     frame5: String,
                     frame6: String,
                     frame7: String,
                     frame8: String,
                     frame9: String,
                     frame10: String) {
}

Чтобы сходить с ума! Правда в том, что это вызывает беспокойство (потому что нет синтаксической ошибки или любого типа)

29
задан Yahoo 19 May 2012 в 05:17
поделиться

2 ответа

При условии, что ваша текущая проверка срабатывает при прокрутке вниз страницы, вы можете попробовать некоторую базовую арифметику:

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){
                                          //where 0.7 corresponds to 70% --^

Обязательно добавьте проверку, чтобы не запускать несколько одновременных запросов Ajax, если вы не уже.

Это скорее выходит за рамки вопроса, но если вам нужен пример того, как предотвратить одновременный запуск нескольких запросов:

Объявите глобальную переменную, например, processing.

Затем включите его в свою функцию:

if (processing)
    return false;

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){
    processing = true; //sets a processing AJAX request flag
    $.post("url", '<params>', function(data){ //or $.ajax, $.get, $.load etc.
        //load the content to your div
        processing = false; //resets the ajax flag once the callback concludes
    });
}

Это простой пример использования var для отслеживания, есть ли активный запрос Ajax для вашей функции прокрутки или нет, и это не мешает с любым другим совпадающим запросом Ajax, который у вас может быть.

Редактировать: Пример JSFiddle

Обратите внимание, что использование% для измерения высоты документа может быть плохой идеей, учитывая, что высота документа будет увеличиваться каждый раз, когда вы что-то загружаете, делая это вызывает Ajax-запрос, находящийся относительно далеко от нижней части страницы (по абсолютному размеру).

Я бы рекомендовал использовать фиксированное значение смещения, чтобы предотвратить это (200-700 или около того):

if ($(window).scrollTop() >= $(document).height() - $(window).height() - 700){
                                 // pixels offset from screen bottom   --^

Пример: JSFiddle

Изменить: Чтобы воспроизвести проблему в первом коде с процентами, загрузите в него 50 div с. Когда вы загрузите следующий div, он добавит только 2% к общей высоте документа, что означает, что следующий запрос будет запущен, как только вы прокрутите эти 2% назад к 70% высоты документа. В моем фиксированном примере определенное нижнее смещение будет загружать новый контент, только когда пользователь находится в определенном диапазоне абсолютных пикселей от нижней части экрана.

85
ответ дан Fabrício Matté 19 May 2012 в 05:17
поделиться

Быстрый поиск в Google по get percentage scrolled down вызывает эту страницу в качестве первого результата (с кодом ниже, который более или менее выполняет то, что вы хотите). Я чувствую, что вы не предприняли никаких исследований, прежде чем спросить здесь.

$(document).scroll(function(e){

    // grab the scroll amount and the window height
    var scrollAmount = $(window).scrollTop();
    var documentHeight = $(document).height();

    // calculate the percentage the user has scrolled down the page
    var scrollPercent = (scrollAmount / documentHeight) * 100;

    if(scrollPercent > 50) {
        // run a function called doSomething
       doSomething();
    }

    function doSomething() { 

        // do something when a user gets 50% of the way down my page

    }

});
11
ответ дан Daedalus 19 May 2012 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: