2014-10-11 11 views
14

Sto cercando di implementare qualcosa di simile a questo in una direttiva AngularJS:AngularJS 'scrollTop' equivalente?

https://github.com/geniuscarrier/scrollToTop/blob/master/jquery.scrollToTop.js

E 'abbastanza semplice, quando non si è al top della pagina svanirà in un pulsante per scorrere fino alla inizio:

$(window).scroll(function() { 
       if ($(this).scrollTop() > 100) { 
        $this.fadeIn(); 
       } else { 
        $this.fadeOut(); 
       } 
      }); 

Tuttavia, sto avendo difficoltà a trovare come ottenere la posizione di scorrimento corrente in Angolare. Preferirei non dover usare jQuery solo per questa singola cosa.

Grazie!

risposta

31
$window.pageYOffset 

Questa è proprietà da $ finestra di servizio

4

Non credo ci sia nulla in Angolare per ottenere la posizione di scorrimento. Basta usare la semplice vaniglia JS.

È possibile recuperare la proprietà scrollTop su qualsiasi elemento.

https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

document.body.scrollTop 

Fiddle per voi: http://jsfiddle.net/cdwgsbq5/

+0

Oh uomo ho pensato scrollTop era un jQuery cosa, grazie! – pram

+1

Ciò comporta un comportamento diverso in chrome e firefox. Qualche soluzione per questo problema? –

2

Iniettare la finestra $ nel controller e si può ottenere la posizione di scorrimento su scroll

var windowEl = angular.element($window); 
var handler = function() { 
    console.log(windowEl.scrollTop()) 
} 
windowEl.on('scroll', handler); 

Fiddle

Adattamento da un altro stackoverflow answer

+0

Immagino che questo stia accedendo al metodo jqLite (o jQuery)? – pcnate

+0

sì con jqlite di Angular! –

0

È possibile utilizzare

angular.element(document).bind('scroll', function() { 
    if (window.scrollTop() > 100) { 
     $this.fadeIn(); 
    } else { 
     $this.fadeOut(); 
    } 
}); 
0

È possibile utilizzare come come polyfill qui link

function offset(elm) { 
    try {return elm.offset();} catch(e) {} 
    var rawDom = elm[0]; 
    var _x = 0; 
    var _y = 0; 
    var body = document.documentElement || document.body; 
    var scrollX = window.pageXOffset || body.scrollLeft; 
    var scrollY = window.pageYOffset || body.scrollTop; 
    _x = rawDom.getBoundingClientRect().left + scrollX; 
    _y = rawDom.getBoundingClientRect().top + scrollY; 
    return { left: _x, top: _y }; 
} 
+0

Dovresti davvero aggiungere qualche spiegazione sul motivo per cui questo codice dovrebbe funzionare - puoi anche aggiungere commenti nel codice stesso - nella sua forma attuale, non fornisce alcuna spiegazione che possa aiutare il resto della comunità a capire cosa hai fatto risolvere/rispondere alla domanda. – ishmaelMakitla

Problemi correlati