Как получить максимальную высоту прокрутки в jScrollPane? - PullRequest
1 голос
/ 03 декабря 2010

jScrollPane - это потрясающий плагин jQuery, который изменяет полосы прокрутки браузера по умолчанию.Я разрабатываю приложение чата, которое будет использовать jScrollPane.Пока он отлично работает, за исключением того факта, что я не могу определить максимальную высоту прокрутки.Вот что я пытаюсь сделать:

$(function ()
{
    $('#chatPane').jScrollPane();
    var api = $('#chatPane').data('jsp');
    setInterval(function ()
    {
        $.ajax(
        {
            url: "Home/GetMessage",
            type: "POST",
            success: function (response)
            {
                // This next line is where the issue occurs. I need to check if the current scroll position is equal to the max scroll position. This is to implement the auto scroll if the user has scrolled to the bottom of the chat.
                var atBottom = (api.getContentPane().getContentPositionY() == api.getContentPane().getMaxScrollHeight()??????);
                api.getContentPane().append(response);
                api.reinitialise();
                if (atBottom)
                    api.scrollToBottom();
            },
            error: function (xhr, textStatus, errorThrown)
            {
                alert(textStatus);
            }
        });
    }, 1000);
});

getMaxScrollHeight не существует.Мне нужен какой-то способ определения максимальной высоты прокрутки.

РЕДАКТИРОВАТЬ: Я получил его для работы со следующими изменениями в функции успеха ajaxНо если кто-нибудь знает лучший способ, чем прокрутка вниз, получение текущей позиции, а затем прокрутка назад к предыдущей позиции, это будет высоко ценится.

            success: function (response)
            {
                var currentPosition = api.getContentPositionY();
                api.scrollToBottom();
                var maxPosition = api.getContentPositionY();
                api.scrollToY(currentPosition);
                var atBottom = (currentPosition == maxPosition);
                api.getContentPane().append(response);
                api.reinitialise();
                if (atBottom)
                    api.scrollToBottom();
            }

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Я вижу, у вас уже есть решение. Другой подход может заключаться в добавлении прослушивателя для события jsp-scroll-y:

http://jscrollpane.kelvinluck.com/events.html

Этот слушатель получает логические значения для isAtTop и isAtBottom. Вы можете сохранить это в переменной и проверить состояние переменной перед повторной инициализацией полосы прокрутки.

В долгосрочной перспективе было бы здорово, если бы вы могли добавить запрос на добавление некоторых дополнительных методов к API: isAtTop, isAtBottom, isAtLeft и isAtRight - если вы добавите это к GitHub выдаёт список , тогда я добавлю его, когда получу шанс.

1 голос
/ 03 декабря 2010

Одним из решений, которое вы можете попробовать, является моделирование scrollToBottom(), а затем сравнение полученного значения getContentPositionY() со значением до моделирования.Если оно не изменилось, то пользователь уже был внизу, поэтому после добавления содержимого ответа вызовите scrollToBottom() «по-настоящему».

Чтобы запустить симуляцию, вы можете попробовать клонировать исходный объект изатем изменить его в памяти.См. http://api.jquery.com/clone/ для получения дополнительной информации.Например:

var simulatedPane = $('#chatPane').clone();
simulatedPane.jScrollPane();
var simulatedApi = simulatedPane.data('jsp');

Затем в функции success () используйте simulatedApi для симуляции.

...