jScrollPane在元素拖动时滚动
jScrollPane scrolling on element drag
我正试图通过突出显示文本并向下拖动来滚动。现在,正如您可能知道的,这是标准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
}
},
})
您只需要根据鼠标离div末尾的距离向下/向上滚动即可;不如本机解决方案好,但它完成了任务(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 ;})
顺便说一句,它反转选择的原因是它到达了文档的末尾,只需在那里放一些空白,问题就解决了。
我真的不想这么说,我知道这是一个问题,即使我在更新这个插件时遇到了这个问题,但在旧插件中(如图所示),它与基本调用配合得很好。所以我只是恢复了我的副本。
相关文章:
- JQuery UI可拖动潜水与滚动棒到鼠标
- 支持在画布上滚动和拖动操作
- 移动浏览器-如何删除拖动到水平滚动
- 自定义内容滚动框'的滚动条在拖动时跳转
- 滚动容器时,元素的拖动出错
- 拖放区中可拖动的 Jqueryui 不会滚动,会恢复,滚动条存在
- 在可滚动容器上拖动时防止自动滚动
- 拖动时设置滚动条不透明度
- JQuery UI拖动到可排序状态而不滚动
- 拖动滚动触摸设备,如手机/ iPad
- 谷歌地图在滚动时拖动
- 用于制作可滚动和可拖动图像滑块的库
- 使用 jQuery 拖动滚动页面
- iPad 无法在具有 JavaScript UI 可拖动页面的页面上滚动
- 光滑网格:可以在拖动列时在网格上水平滚动
- 使用 D3.js 拖动元素时滚动
- 拖动时自动滚动
- 触摸拖动画布时滚动页面
- Jquery Fancybox 可拖动的滚动条问题
- 在任一图形上使用滚轮/拖动时放大和缩小/滚动的堆叠图形