javascript - jScrollPane 在元素拖动时滚动

标签 javascript jquery jscrollpane highlighting jquery-jscrollpane

我试图通过突出显示文本并向下拖动来滚动。现在,您可能已经知道,这是标准 overflow: auto 元素的标准默认行为,但是我正在尝试使用 Kelvin Luck 提供的 jQuery jScrollPane 提供的一些花哨的滚动条。

我在这里创建了一个 fiddle :DEMO

基本上如您所见,突出显示和滚动在顶部框(默认的 overflow: auto 框)中起作用,但在第二个框中不起作用,而且,更复杂的是,一旦您到达底部它会反转您的选择!

所以,我的问题是(是)这个(这些):有没有办法解决这个问题?如果是,怎么办?

更新

我在这方面做了很多工作,并找到了一个使用 setTimeout()

的小解决方案

然而,它并没有按预期工作,如果有人愿意帮助我,我已经把它 fork 到一个新的 fiddle 上了: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
        }
    },
})​

最佳答案

您只需要根据鼠标离 div 末尾的距离向下/向上滚动;不如 native 解决方案好,但它完成了工作(http://jsfiddle.net/PWYpu/25/)

$('#scrolldiv2').jScrollPane();

var topScroll = $('#scrolldiv2').offset().top,
    endScroll = topScroll + $('#scrolldiv2').height(),
    f = ($('#scrolldiv2').height() / $('#scrolldiv2 .jspPane').height())*5 ,
    selection = false,
    _prevY;

$(document).mousemove(function(e){
    var mY;
    var delta = _prevY - e.pageY;
    if((e.pageY < endScroll && (mY = ((e.pageY - endScroll + 80)/f)) > 0) || 
       (e.pageY > topScroll && (mY = (e.pageY - (topScroll + 80))/f) < 0)){
          if(selection && (delta > 10 || delta < -10) )
          $('#scrolldiv2').data('jsp').scrollByY(mY, false) ;
    } 
})   

$('#scrolldiv2').mousedown(function(e){_prevY = e.pageY; selection = true ;})
$(window).mouseup(function(){selection = false ;})​

顺便说一句,它反转选择的原因是因为它到达了文档的末尾,只需在下面放一些空白,问题就解决了。

关于javascript - jScrollPane 在元素拖动时滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705421/

相关文章:

javascript - 不允许加载本地资源 : <blob_url> while accessing url in content script

javascript - 选择选项更改时如何更改值?

javascript - html div onclick 事件

java - 为什么我要在这个例子中使用 JScrollPane ?

javascript - 如何在后台页面使用本地存储打开/关闭chrome扩展?

javascript - 触发器在 jquery-steps 上不起作用?

javascript - PJAX 成功后执行页面特定的 javascript 代码

javascript - 如何使用ajax获取php多个值到不同的Div中

java - 使Java JScrollpane仅垂直滚动

java - 为什么我的 JPanel 在 JScrollPane 中不滚动?