テキストを強調表示して下にドラッグしてスクロールしようとしています。ご存知かもしれませんが、これは標準overflow: auto
要素の標準のデフォルトの動作ですが、KelvinLuckによるjQueryjScrollPaneの好意により、いくつかの凝ったスクロールバーを使用してこれを実行しようとしています。
ここでフィドルを作成しました:DEMO
基本的にご覧のとおり、ハイライトとスクロールは上部のボックス(デフォルトのoverflow: auto
ボックス)で機能しますが、2番目のボックスでは機能しません。さらに複雑なことに、下部に到達すると、選択内容が反転します。
だから、私の質問はこれ(これら)です:これを修正する方法はありますか?もしそうなら、どのように?
アップデート
私はこれにかなり取り組んでおり、を使用してわずかな解決策を見つけました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
}
},
})