Programuję aplikację jednostronicową, korzystając z frameworka Angular. Jestem na to nowy. Przeczytałem this guide, aby pomóc mi zrozumieć podstawowe różnice między jQuery i Angular i chciałbym postępować zgodnie z tymi wskazówkami w jak największym stopniu, a NIE używać jQuery.Jak uzyskać offset(). Najwyższa wartość elementu bez użycia jQuery?
Poza tym jQuery pomaga ominąć niektóre z niezgodności przeglądarek i zapewnia przydatną bibliotekę funkcji, takich jak możliwość poznania górnej pozycji elementu od góry okna, jak w przypadku $('element').offset().top
. Żadna prosta JavaScript nie jest w stanie zbliżyć się bez przepisywania tej funkcji. W takim razie nie byłoby lepszym pomysłem użycie biblioteki jQuery lub jQuery?
W szczególności próbuję ustawić dyrektywę, która naprawia element w miejscu, gdy jego górna część przewinie się do określonej pozycji w oknie. Oto jak to wygląda:
directives.scrollfix = function() {
return {
restrict: 'C',
link: function (scope, element, $window) {
var $page = angular.element(window)
var $el = element[0]
var elScrollTopOriginal = $($el).offset().top - 40
$page.bind('scroll', function() {
var windowScrollTop = $page[0].pageYOffset
var elScrollTop = $($el).offset().top
if (windowScrollTop > elScrollTop - 40) {
elScrollTopOriginal = elScrollTop - 40
element.css('position', 'fixed').css('top', '40px').css('margin-left', '3px');
}
else if (windowScrollTop < elScrollTopOriginal) {
element.css('position', 'relative').css('top', '0').css('margin-left', '0');
}
})
}
}
}
Jeśli jest to znacznie lepszy sposób na osiągnięcie tego w kątowa, że nadal jestem po prostu nie dostanę, będę docenić porady.
przyjętego rozwiązania nie bierze aktualną pozycję przewijania pod uwagę, zobacz moją odpowiedź poniżej – schellmax