2014-10-11 9 views
14

szukam zaimplementować coś podobnego do tego w angularjs dyrektywy:Odpowiednik "scrollTop" AngularJS?

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

To dość proste, gdy nie znajdują się na górze strony, że znikną w przycisk, aby przejść do top:

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

Mam jednak problem ze znalezieniem aktualnej pozycji przewijania w Angular. Wolałbym nie używać jQuery tylko dla tej jednej rzeczy.

Dzięki!

Odpowiedz

31
$window.pageYOffset 

Jest to nieruchomość od $ okna serwisowego

4

Nie wierzę, że jest coś w Angular, aby uzyskać pozycję przewijania. Po prostu użyj zwykłego waniliowego JS.

Możesz pobrać właściwość scrollTop na dowolnym elemencie.

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

document.body.scrollTop 

Fiddle dla Ciebie: http://jsfiddle.net/cdwgsbq5/

+0

O człowieku myślałem scrollTop był jQuery rzecz, dzięki! – pram

+1

Powoduje to różne zachowanie w chrome i firefox. Jakieś rozwiązanie tego problemu? –

2

wstrzyknąć okno $ do kontrolera można uzyskać pozycję przewijania przewiń

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

Fiddle

Adaptacja z innego stackoverflow answer

+0

Zgaduję, że to jest dostęp do metody jqLite (lub jQuery)? – pcnate

+0

yep z jqlite Angulara! –

0

Można użyć

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

można używać jak jak PolyFill tu 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

Naprawdę powinieneś dodać wyjaśnienia, dlaczego ten kod powinien zadziałać - możesz również dodawać komentarze w samym kodzie - w jego obecnej formie nie zawiera żadnego wyjaśnienia, które może pomóc reszcie społeczności zrozumieć, co zrobiłeś rozwiązać/odpowiedzieć na pytanie. – ishmaelMakitla

Powiązane problemy