Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Scrollbar и ajax (https://javascript.ru/forum/dom-window/7469-scrollbar-i-ajax.html)

cooli0 03.02.2010 02:05

Scrollbar и ajax
 
Всем привет!

Делаю собственный scrollbar для дива. Все работает отлично. Но вот появилась проблема. Контент периодически добавляется => scrollHeight увеличивается. После того, как это происходит - я обновляю размер скроллера, но положение скроллера на треке остается неизменным и, как только начиаешь его двигать, то он как-бы спрыгивает с видимого контента в другое место. Не уверен, что объяснил доступно. На примере - если в textarea есть какой-то текст и мы перемещаем скролл в середину, а после этого добавим дофига текста (например через firebug:)))), то скроллер, по мере добавления текста, будет уменьшаться и перемещаться вверх. Вот интересует вычесление этого перемещения. После аякса я вызываю Scrollbar.update();

вот что она делает

Scrollbar.prototype._setScrollerHeight = function() {
        var scroller_height = 20;
        if ( this.target.scrollHeight > this.target.clientHeight ) {
            scroller_height = ( this.height * ( this.height -34) ) / this.target.scrollHeight;
            scroller_height = Math.round(scroller_height);
            scroller_height = scroller_height < 15 ? 15 : scroller_height;
            this._can_draw = true;
        }

        this._scroller_height = scroller_height;
    };

    Scrollbar.prototype.update = function() {
        if ( !this._scroller ) {
            this._run();
        }
        var old_scroller_height = this._scroller_height;
        this._setScrollerHeight();
        if ( old_scroller_height == this._scroller_height ) {
            return;
        }
        Dom.setStyle(this._scroller, 'height', this._scroller_height);
        this.recalculateStep();

        this._old_target_height = this._getScrollPosition();
    };


Тут происходит изменение размера самого скроллера...Думаю, что для вычисления новой позиции - что-то с пропорциями, но я туплю. Уже запарился с этим. Помогите, кто может)


Часовой пояс GMT +3, время: 21:00.