2013-07-27 11 views
13

Ich habe 50 divs, aber in meinem Fenster zeigt es nur 25, ziehe ich Drag-and-Drop-Aktivität auf diese divs.So wenn ich meine erste div in der Nähe ziehen 25. div, Es sollte automatisch scrollen, um die restlichen divs.show zu zeigen mache ich das in jquery? irgendeine Idee?Wie scrollt das Fenster automatisch, wenn Maus bewegt sich unter der Seite mit jquery

Ich verwende Nestable nicht ziehbar()

+2

Scroll Ereignisse ausgelöst werden kann, hilft manuell hier erklärt: https://developer.mozilla.org/en-US/docs/Web/API/window.scroll Da Sie jedoch jQuery Drag & Drop speziell verwenden, dachte ich, ziehen Element am unteren Rand des Browserfensters ausgelöst sowieso das Scroll-Ereignis? – Ken

+0

Woher weiß man, wann der Boden des Fensters beim Ziehen des Elements erreicht ist? – Achaius

+1

Ich dachte, dass es das automatisch gemacht hat. http://ktstowell.github.io/angular-file-utils/#/ Ich benutze Drag and Drop hier. Wenn ich den Mauszeiger über den linken Rand des Fensters ziehe, blättert der Browser zum Inhalt unterhalb der Falte. – Ken

Antwort

11

Dies erfordert je nach Anwendungsfall eine Feinabstimmung, scheint aber ziemlich gut zu funktionieren.

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({ 

     }); 
    } 
}); 

Verwandte API-Dokumentation:

+0

Danke, das wurde ich erwartet. Dieses Skript funktioniert einwandfrei. Vielen Dank. – Achaius

+0

Das ist wirklich sehr unangenehm. Wenn ich die Maus weiter unten bewege, scrollt sie nicht nach unten, weil die Animationen sich gegenseitig aufheben, und wenn ich mich * weg * von unten nach oben bewege, scrollt sie einen vorbestimmten Betrag. Außerdem wird der Status des Objekts, das Sie ziehen, nicht aktualisiert, bis Sie die Maus bewegen. – 1j01

2

Wenn Sie unteren Rand des Fensters wissen wollen, können Sie

$(window).height() 

und $(window).scrollTop() überprüfen;

1

Ich weiß, dies ist ein altes Thema, aber da diese Funktion im Standby-Modus hält, ich habe gerade apaul34208 den Code verbessert, hoffen, dass es

$(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

Das behebt die Löschung anderer Animationen, ist aber immer noch nicht großartig. Der Übergang ist nichtlinear, also startet und stoppt er, wenn Sie die Maus um den Scroll-Down-Bereich bewegen. Wenn Sie die Maus nicht bewegen, wenn sie die Animation beendet hat, hört sie auf zu scrollen, bis Sie ein Pixel bewegen, selbst wenn Sie zum Beispiel im Scroll-Down-Bereich pausiert hatten und die Maus davon wegbewegten. – 1j01

Verwandte Themen