Поддерживать положение прокрутки для div на основе положения полосы прокрутки - PullRequest
1 голос
/ 27 июля 2011

У меня написан мой код здесь .

setInterval(
    function (data){
        var alreadyScrolled = $("#smallBox").height() >= $("#smallBox").get()[0].scrollHeight;


        $("#smallBox").append(data + "<br />");
        if (alreadyScrolled) {
            $("#smallBox").scrollTop($("#smallBox").heightoffsetHeight)
        }
    },
    1000, 
    Date()
);


<div id="largeBox">
    <div id="smallBox">
    </div>
    <input />
</div>

То, что я пытаюсь сделать, это определить, находится ли полоса прокрутки внизу окна, и, если это так, добавить новые данные в div, а затем прокрутить обратно вниз. Если свиток не находится внизу, ничего не делать.

Я не уверен, какие части DOM или jquery API я могу использовать для достижения этой цели, я пробовал несколько вещей и несколько застрял здесь, кажется, ничто не дает мне значения с точки зрения места прокрутки Бар есть, и сколько я могу прокрутить. Процентное значение было бы здорово, если бы я мог просто получить это.

Я не хочу использовать какие-либо библиотеки за пределами jQuery, это означает, что плагинов тоже нет.

Я ожидаю того же поведения, которое мы наблюдаем в чатах SO, за исключением того, что, похоже, он использует плагин ScrollTo для выполнения своих функций.

Update.

Я не могу просто использовать .height () и .scrollTop, они не совпадают.

Смотрите это: http://jsfiddle.net/qSx3M/6/

Ответы [ 4 ]

3 голосов
/ 28 июля 2011

Я думаю, это то, что вы ищете?

http://jsfiddle.net/qSx3M/7/

Код:

var alreadyScrolled = $("#smallBox")[0].scrollTop + $("#smallBox").height() == $("#smallBox")[0].scrollHeight;
1 голос
/ 28 июля 2011

Взял свой код и внес небольшие изменения. Не могу сказать, хороший ли это код, но он работает

setInterval(
    function (data){
        var alreadyScrolled = $("#smallBox").height() + $("#smallBox").get()[0].scrollTop >= $("#smallBox").get()[0].scrollHeight;

        console.log(alreadyScrolled);

        $("#smallBox").append(data + "<br />");
        if (alreadyScrolled) {
            $("#smallBox").get()[0].scrollTop = $("#smallBox").get()[0].scrollHeight;
        }
    },
    1000, 
    Date()
);
0 голосов
/ 28 июля 2011

Попробуйте это

var $this;
  $('#container').scroll(function(){
    $this = $(this);
    if ($this.scrollTop() > $this.height()){
       //Do something here
    }
});
0 голосов
/ 27 июля 2011

Обычное значение прокрутки JavaScript:

var scrollVal = myDivElem.scrollTop;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...