jScrollPane прокрутка элемента перетаскивание

Я пытаюсь прокручивать, выделяя текст и перетаскивая его вниз. Теперь, как вы, вероятно, знаете, это стандартное поведение по умолчанию для стандартного элемента overflow: auto, однако я пытаюсь сделать это с некоторыми причудливыми полосами прокрутки, любезно предоставленными jQuery jScrollPane Кельвином Лаком.

Я создал скрипт здесь: DEMO

в основном, как вы можете видеть, выделение и прокрутка работают в верхнем поле (по умолчанию overflow: autobox), но во втором не делает, и, что усугубляет ситуацию, как только вы достигаете дна, он ИНВЕРТИРУЕТ ваш выбор!

Итак, мой(е) вопрос(ы) таков(ы): есть ли способ исправить это? Если да, то как?

ОБНОВЛЕНИЕ

Я немного поработал над этим и нашел небольшое решение, используя setTimeout()

, однако это не работает должным образом, и если кто-то готов помочь, у меня есть разветвил его на новую скрипку здесь: jsFiddle

сам код:

pane = $('#scrolldiv2');
pane.jScrollPane({animateEase: 'linear'});
api = pane.data('jsp');

$('#scrolldiv2').on('mousedown', function() {
    $(this).off().on('mousemove', function(e) {
        rel = $(this).relativePosition();
        py = e.pageY - rel.y;
        $t = $(this);
        if (py >= $(this).height() - 20) {
            scroll = setTimeout(scrollBy, 400, 20);
        }
        else if (py < 20) {
            scroll = setTimeout(scrollBy, 400, -20);
        }
        else {
            clearTimeout(scroll);
        }
    })
}).on('mouseup', function() {
    $(this).off('mousemove');
    clearTimeout(scroll);
})

var scrollBy = function(v) {
    if (api.getContentPositionY < 20 & v == -20) {
        api.scrollByY(v + api.getContentPositionY);
        clearTimeout(scroll);
    } else if (((api.getContentHeight - $t.height()) - api.getContentPositionY) < 20 & v == 20) {
        api.scrollByY((api.getContentHeight - $t.height()) - api.getContentPositionY);
        clearTimeout(scroll);
    } else {
        api.scrollByY(v, true)
        scroll = setTimeout(scrollBy, 400, v)
    }
}

$.fn.extend({
    relativePosition: function() {
        var t = this.get(0),
            x, y;
        if (t.offsetParent) {
            x = t.offsetLeft;
            y = t.offsetTop;
            while ((t = t.offsetParent)) {
                x += t.offsetLeft;
                y += t.offsetTop;
            }
        }
        return {
            x: x,
            y: y
        }
    },
})​

5
задан Andrew Willis 14 March 2012 в 19:01
поделиться