目的は、要素がページの上部に近づくと、クラスをnavアイテムに適用することです。AngularJS - 多くの用途の1つでディレクティブのみを実行する
TEMPLATE
<ul class="nav">
<li>
<a href="#someID">Some ID</a>
</li>
</ul>
...
<div id="someId" hightlight-relevant-items></div>
今DIRECTIVE
'use strict';
angular.module("common.directives")
.directive('highlightRelevantItems', function() {
return function (scope, element, attrs) {
scope.detectPos = function() {
var distanceScrolled = $(window).scrollTop();
var topOfElement = element.offset().top;
var height = element.height();
var link = '[href="#' + element.attr('id') + '"]';
var delta = topOfElement - distanceScrolled;
var offScreen = delta+height
if (delta < 0 && offScreen > 0) {
$(link).addClass('active');
} else if (delta >= 0) {
$(link).removeClass('active');
} else if (offScreen <= 0) {
$(link).removeClass('active');
}
console.log(element.attr('id') + ' ' + topOfElement);
}
$(window).bind('scroll', function() {
scope.detectPos();
});
}
});
、ディレクティブ属性を持つすべての要素に対してこのディレクティブ火災が、唯一の最後のinterationに登録します。だから私がsomeID1
、someID2
、someID3
を持っていたならば、それはすべての要素に対して、しかし、someID3
のためのデータでしか発射しません。
このディレクティブを使用してすべての要素に対してどのように動作させるにはどうすればよいですか?
私はこのメソッドを見ていましたが、私のウィンドウのスクロールバインドをどこに置くべきか分かりませんでした。どうもありがとう。 – Plummer
そのために別のディレクティブを作成し、bodyタグまたはルートdivタグのディレクティブを使用してください – dannielum