我试图通过突出显示文本并向下拖动来滚动。现在,您可能知道,这是标准overflow: auto
元素的标准默认行为,但是我尝试使用由 Kelvin Luck 提供的 jQuery jScrollPane 提供的一些精美滚动条来实现。
我在这里创建了一个小提琴:DEMO
基本上如您所见,突出显示和滚动在顶部框(默认overflow: auto
框)中有效,但在第二个中则不起作用,而且更复杂的是,一旦您到达底部,它就会反转您的选择!
所以,我的问题是(是)这个(这些):有没有办法解决这个问题?如果是这样,怎么做?
更新
我一直在研究这个问题,并找到了一个轻微的解决方案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
}
},
})