【发布时间】:2016-02-25 22:04:48
【问题描述】:
当我当前观看相应部分时,我尝试将导航栏 li 对象设置为活动状态。 换句话说:当滚动浏览我的页面(包含多个部分的单页)时,我正在观看的部分应在导航栏中突出显示。
我已经通过指令获得了滚动位置。我失败的地方是在 .nav ul li 上触发 ng-class。
<li class="" ng-class="{'active': $parent.scrollPos > document.getElementById('something').offset()}">
<a class="" ng-click="isCollapsed = true" href="#something" du-smooth-scroll>Something</a>
</li>
我使用时没有任何区别
ng-class="{'active': $parent.scrollPos > angular.element('#something').offset()}"
如何获取到任何元素的文档顶部的距离?
非常感谢。
PS:我使用 jQuery(不是 lite)!
编辑 它是如何工作的(感谢@Sharikov Vladislav): 在正文上我使用“PageCtrl”:
<body id="page-top" class="index bg-default" ng-app="previewApp" ng-controller="PageCtrl">
看起来像这样:
angular.module('previewApp')
.controller('PageCtrl', function($scope, $element) {
$scope.scrollPos = 0;
$scope.getOffset = function (elementId) {
var element = $element.find(elementId);
return element.offset().top;
};
});
在 body 之后我使用 span
<span scroll-position="scrollPos"></span>
初始化我的“scrollPosition”指令,它允许我访问 PageCtrl 中 $scope.scrollPos 上的当前滚动位置。 指令:
angular.module('previewApp')
.directive('scrollPosition', function ($window) {
return {
scope: {
scrollPos: "=scrollPosition"
},
link: function (scope, element, attrs) {
var windowElement = angular.element($window);
var handler = function () {
scope.scrollPos = windowElement.scrollTop();
}
windowElement.on('scroll', scope.$apply.bind(scope, handler));
handler();
}
};
});
在我的 .nav ul li 中,如下所示。 “- 150”用于更准确的突出显示。
<div class="navbar-collapse" uib-collapse="isCollapsed" id="menu-center">
<ul class="nav navbar-nav navbar-right">
<li class="hidden">
<a href="#page-top"></a>
</li>
<li ng-class="{'active': $parent.scrollPos > $parent.getOffset('#section1') - 150 && $parent.scrollPos < $parent.getOffset('#section2') - 150}">
<a ng-click="isCollapsed = true" href="#section1" du-smooth-scroll>Section1</a>
</li>
<li ng-class="{'active': $parent.scrollPos > $parent.getOffset('#section2') - 150 && $parent.scrollPos < $parent.getOffset('#section3')}">
<a ng-click="isCollapsed = true" href="#section2" du-smooth-scroll>Section2</a>
</li>
</ul>
</div>
我希望这可以帮助那些像我一样在同一问题上苦苦挣扎的人。问候
【问题讨论】:
标签: javascript jquery angularjs