// jQuery sidescroll code. Can easily be modified for vertical scrolling as well.
// This code was hacked together so clean it up if you use it in prod.
// Written by Josh Moore
// Thanks to Rory McCrossan for a good starting point
// How far away the mouse should move on a drag before interrupting click
// events (your own code must also interrupt regular click events with a
// method that calls getAllowClick())
const THRESHOLD = 32;
var clicked = false;
var allowClick = true;
// mouseX: most recent mouse position. updates when mouse moves.
// el: jQuery element that will be scrolled.
// thX: "threshold X", where the mouse was at the beginning of the drag
var mouseX, startY, el, thX;
// Add the .drag class to any element that should be scrollable.
// You may need to also add these CSS rules:
// overflow: hidden; /* can be replaced with overflow-x or overflow-y */
// whitespace: none;
function drag() {
$('.drag').on({
'mousemove': e => {
if (el != null && clicked) {
el.scrollLeft(el.scrollLeft() + (mouseX - e.pageX));
mouseX = e.pageX;
allowClick = Math.abs(thX - mouseX) > THRESHOLD ? false : true;
}
},
'mousedown': e => {
clicked = true;
// This lets the user click child elements of the scrollable.
// Without it, you must click the .drag element directly to be able to scroll.
el = $(e.target).closest('.drag');
mouseX = e.pageX;
thX = e.pageX;
},
'mouseup': e => {
clicked = false;
el = null;
allowClick = true;
}
});
}
function getAllowClick() {
return allowClick;
}
9条答案
按热度按时间zwghvu4y1#
你可以通过记录鼠标点击时的位置和拖动鼠标时的当前位置来实现这一点。
要防止拖动时选择文本,请添加以下CSS:
Example fiddle
下面是一个jQuery插件版本,扩展后可以通过设置进行垂直和水平滚动,还可以更改
cursor
。一个一个二个一个一个一个三个一个一个一个一个一个四个一个
zbq4xfa02#
我只是想补充一下,用Rory的代码我做了水平滚动。
ngynwnxp3#
这段代码将工作在水平和垂直鼠标拖动滚动。这是相当简单。
j1dl9f464#
基于Rory McCrossan的思想,用AngularJS2. 0实现。
qeeaahzv5#
根据第一个答案,这是鼠标拖动时水平滚动的代码:
lnxxn5zx6#
我修改了Rory的代码很多,我得到了每个元素侧滚动的工作。我需要一个项目,有多个滚动磁贴在一个网页应用程序的单一视图。添加
.drag
类到任何元素,可能做一些样式,它应该很好去。同样,我没有使用垂直滚动,但它将是相当简单的添加(取代X的Y的,
scrollTop()
取代scrollLeft()
,等等)。希望这有助于有人在未来!zvokhttg7#
这个框架是用vanilla javascript编写的,最适合我。
它还支持divs中的滚动条。
注意:如果创建动态内容,请在渲染后调用
dragscroll.reset();
。dragscroll
用途
demo
kmb7vmvb8#
下面是一个基于单个元素类的简单滚动解决方案
针对水平和垂直滚动进行了全面验证
您只需将**.cursorgrab**class设置到元素中
wh6knrhe9#
香草JS: