【发布时间】:2013-09-27 23:44:02
【问题描述】:
我正在使用 Angular 框架编写单页应用程序。我是新手。我已阅读 this guide 以帮助我了解 jQuery 和 Angular 之间的根本区别,并且我想尽可能地遵循本指南而不使用 jQuery。
除了 jQuery 有助于解决一些浏览器不兼容问题并提供有用的函数库,例如能够从窗口顶部知道元素的顶部位置,如 $('element').offset().top。如果不重写此函数,似乎没有普通的 Javascript 能够接近,此时使用 jQuery 或类似 jQuery 的库不是 更好的主意吗?
具体来说,我要做的是设置一个指令,一旦元素的顶部滚动到窗口中的某个位置,就可以将其固定到位。这是它的样子:
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');
}
})
}
}
}
如果在 Angular 中有更好的方法来实现这一点,但我仍然没有得到,我会很感激你的建议。
【问题讨论】:
-
接受的解决方案不考虑当前滚动位置,请参阅下面的答案
标签: jquery angularjs window offset scrolltop