2013-07-27 11 views
13

Mam 50 elementów div, ale w moim oknie pokazuje tylko 25, ja przeciągam i upuszczam aktywność na tych elementach. Tak więc Jeśli przeciągnę mój pierwszy element div w pobliżu 25. div, Powinien przewijać automatycznie, aby pokazać pozostałe div. Jak to zrobić w jquery? dowolny pomysł?Jak automatycznie przewijać okno, gdy mysz porusza się po dnie strony, używając jquery

Używam Nestable nie przeciągać()

+2

zdarzenia przewijania można uruchamiać ręcznie, jak wyjaśniono tutaj: https://developer.mozilla.org/en-US/docs/Web/API/window.scroll Jednak, ponieważ używasz w szczególności metody przeciągania i upuszczania jQuery, pomyślałem, że przeciągnięcie element w dolnej części okna przeglądarki wywołał mimo wszystko zdarzenie przewijania? – Ken

+0

Jak sprawdzić, kiedy dno okna zostanie osiągnięte w przeciągu elementu? – Achaius

+1

Myślałem, że to zrobiło automatycznie. http://ktstowell.github.io/angular-file-utils/#/ Używam przeciągania i upuszczania tutaj. Kiedy przeciągam i pozycjonuję po lewej stronie na dole okna, przeglądarka przewija zawartość do miejsca widocznego po przewinięciu. – Ken

Odpowiedz

11

Będzie to wymagać pewnych poprawek w zależności od konkretnego przypadku użycia, ale wydaje się działać całkiem dobrze.

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

     }); 
    } 
}); 

powiązanej dokumentacji API:

+0

Dzięki, tego się spodziewałem. Ten skrypt działa dobrze. Dziękuję bardzo. – Achaius

+0

To naprawdę nieprzyjemne. Jeśli poruszam myszką dookoła dołu, nie przewija się ona w dół, ponieważ animacje znoszą się nawzajem, a następnie, gdy cofam * daleko * od dołu, zaczyna przewijać określoną z góry ilość. Co więcej, nie aktualizuje stanu przedmiotu, który przeciągasz, aż do momentu, gdy poruszasz myszą. – 1j01

2

Jeśli chcesz wiedzieć dołu okna można sprawdzić

$(window).height() 

i $(window).scrollTop();

1

Wiem, że to stary temat ale ponieważ funkcja ta utrzymuje się w stanie wstrzymania, po prostu poprawił kod apaul34208 jest, mam nadzieję, że pomaga

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

To naprawia anulowanie innych animacji, ale nadal nie jest świetne. Przejście jest nieliniowe, więc zaczyna się i kończy, zakładając, że poruszasz myszą wokół obszaru przewijania. Jeśli nie poruszasz myszą po zakończeniu animacji, przerwie ona przewijanie do momentu przesunięcia piksela, nawet jeśli na przykład zatrzymałeś się w obszarze przewijania i zaczynasz odsuwać od niego mysz. – 1j01

Powiązane problemy