2013-07-27 64 views
13

我有50个div,但在我的窗口中只显示25,我在这些div上拖放活动。所以如果我拖动我的第一个div 25th div,它应该自动滚动以显示剩余的div。如何在jquery中执行此操作?任何想法?如何使用jquery自动滚动窗口底部的页面时使用jquery

我使用Nestable不能拖动()

+2

滚动事件可以手动为被触发这里解释: https://developer.mozilla.org/en-US/docs/Web/API/window.scroll 但是,因为你是专门使用jQuery的拖放我想拖动一个元素到浏览器窗口的底部触发滚动事件吗? – Ken

+0

如何在元素拖动时知道何时到达窗口底部? – Achaius

+1

我以为它自动做到了。 http://ktstowell.github.io/angular-file-utils/#/我在这里拖放。当我拖动左边的项目到窗口的底部时,浏览器会滚动到下面的内容。 – Ken

回答

11

这将需要一些微调取决于你的具体用例,但它似乎工作得很好。

Working Example

$('.dd').nestable({ /* config options */ 
}); 

$(window).mousemove(function (e) { 
    var x = $(window).innerHeight() - 50, 
     y = $(window).scrollTop() + 50; 
    if ($('.dd-dragel').offset().top > x) { 
     //Down 
     $('html, body').animate({ 
      scrollTop: 300 // adjust number of px to scroll down 
     }, 600); 
    } 
    if ($('.dd-dragel').offset().top < y) { 
     //Up 
     $('html, body').animate({ 
      scrollTop: 0 
     }, 600); 
    } else { 
     $('html, body').animate({ 

     }); 
    } 
}); 

相关API文档:

+0

谢谢,这是我的预期。这个脚本工作正常。非常感谢。 – Achaius

+0

这真的很不愉快。如果我一直在底部移动鼠标,它不会向下滚动,因为动画互相取消,然后如果我从底部移开*,*它将开始滚动某个预定量。此外,它不会更新您拖动的项目的状态,除非您移动鼠标。 – 1j01

2

如果你想知道窗口的底部,你可以检查

$(window).height() 

$(window).scrollTop();

1

我知道这是一个老话题,但由于此功能保持在待机状态,我只是提高apaul34208的代码,希望它有助于

$(window).mousemove(function (e) { 
    if ($('.dd-dragel') && $('.dd-dragel').length > 0 && !$('html, body').is(':animated')) { 
     var bottom = $(window).height() - 50, 
      top = 50; 

     if (e.clientY > bottom && ($(window).scrollTop() + $(window).height() < $(document).height() - 100)) { 
      $('html, body').animate({ 
       scrollTop: $(window).scrollTop() + 300 
      }, 600); 
     } 
     else if (e.clientY < top && $(window).scrollTop() > 0) { 
      $('html, body').animate({ 
       scrollTop: $(window).scrollTop() - 300 
      }, 600); 
     } else { 
      $('html, body').finish(); 
     } 
    } 
}); 
+0

这修复了其他动画的取消,但仍然不是很好。过渡是非线性的,所以它假定你正在向下滚动区域移动鼠标,开始和停止。如果您在完成动画时没有移动鼠标,它将停止滚动,直到您移动一个像素为止,即使您已经在向下滚动区域暂停并开始将鼠标从其移开。 – 1j01

相关问题