2013-07-27 10 views
13

Ho 50 div, ma nella mia finestra ne mostra solo 25, trascino e rilasciamo attività su questi div. Così se trascino il mio primo div vicino 25th div, Dovrebbe scorrere automaticamente per mostrare i div rimanenti. Come faccio a farlo in jQuery? qualche idea?Come far scorrere automaticamente la finestra quando il mouse si muove in fondo alla pagina usando jquery

Sto usando Nestable non trascinabili()

+2

eventi di scorrimento possono essere attivati ​​manualmente come spiegato qui: https://developer.mozilla.org/en-US/docs/Web/API/window.scroll Tuttavia, poiché si utilizza specificamente il trascinamento della selezione di jQuery ho pensato di trascinare un l'elemento in fondo alla finestra del browser ha attivato comunque l'evento di scorrimento? – Ken

+0

Come sapere quando si raggiunge il fondo della finestra trascinando l'elemento? – Achaius

+1

Pensavo lo facesse automaticamente. http://ktstowell.github.io/angular-file-utils/#/ Io uso il drag and drop qui. Quando eseguo il trascinamento e l'elemento a sinistra nella parte inferiore della finestra, il browser scorre fino al contenuto below the fold. – Ken

risposta

11

Questo richiederà alcune regolazioni fini a seconda del caso d'uso specifico ma sembra funzionare abbastanza bene.

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

     }); 
    } 
}); 

correlate documentazione API:

+0

Grazie, questo mi aspettavo. Questo script funziona bene. Grazie mille. – Achaius

+0

Questo è davvero spiacevole. Se continuo a muovere il mouse sul fondo, non scorre verso il basso perché le animazioni si annullano a vicenda, e quindi se torno indietro * lontano * dal fondo inizia a scorrere una certa quantità predeterminata. Inoltre, non aggiorna lo stato dell'oggetto che stai trascinando fino a quando non muovi il mouse. – 1j01

2

Se vuoi sapere parte inferiore della finestra è possibile controllare

$(window).height() 

e $(window).scrollTop();

1

So che questo è un argomento vecchio, ma dal momento che questa caratteristica mantiene in stand-by, ho solo migliorato il codice di apaul34208, speriamo vi sia utile

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

Questo risolve la cancellazione di altre animazioni, ma ancora non è eccezionale. La transizione non è lineare, quindi inizia e arresta in modo anomalo ipotizzando che tu stia muovendo il mouse intorno all'area di scorrimento. Se non muovi il mouse quando termina l'animazione, smetterà di scorrere finché non muovi un pixel, anche se per esempio ti sei fermato nell'area di scorrimento e stai iniziando a spostare il mouse lontano da esso. – 1j01

Problemi correlati