這可以通過幾種方法完成。這是一個不需要任何外部庫和jQuery 3.2.1和jQuery UI 1.12.1設置。
的JavaScript
$(function() {
$('.drag_me').draggable({
helper: 'clone',
scroll: 'true',
refreshPositions: true
});
$('.drop_on_me').droppable({
accept: '.drag_me',
activeClass: 'active',
hoverClass: 'hover',
tolerance: 'pointer',
over: function(e, ui) {
var buffer = 16;
var step = 30;
var speed = 250;
var upper = $('.drop_area').position().top + buffer;
var lower = $('.drop_area').position().top + $('.drop_area').height() - buffer;
var current = $('.drop_area').scrollTop();
switch (true) {
case (ui.position.top <= upper):
console.log("Direction: Up");
$('.drop_area').animate({
scrollTop: current - step
}, speed);
break;
case ((ui.position.top + ui.helper.height()) >= lower):
console.log("Direction: Down");
$('.drop_area').animate({
scrollTop: current + step
}, speed);
break;
}
}
});
});
工作實例:http://jsfiddle.net/Twisty/rmq15a0w/7/
你提到的庫變得更圓滑,我懷疑這可能會得到改善,但它在功能上做了同樣的各種各樣的事情。如果您想要覆蓋額外的「速度」設置,我使用了switch()
。例如,如果你有一個500件物品的清單。您可能需要upper-1
和upper-2
,其中如果用戶拖動到upper-1
,它會移動滾動step * 2
和upper-2
只移動它在step
。如果您還想向左或向右滾動,則還可以使用中的left
。
很多選擇。希望這可以幫助。
不同步驟的示例:http://jsfiddle.net/Twisty/rmq15a0w/9/ – Twisty
你的例子工作的很好,但只有當光標移動時纔會重複調用'over',所以在滾動區域保持非常穩定意味着沒有運動。 (雖然這可能是足夠的,但是,因爲我想如果用戶沒有看到移動,用戶會晃動光標) –
我明白你的意思了。正如我所說,它可以得到改善。您可以將其拖動到可拖動的「拖動」狀態,但可能會更加活躍。 – Twisty