ユーザーがブラウザウィンドウを特定のポイントより下にスクロールすると、#pagedivのクラスが切り替わります。
私がこれまでに行ったことはうまくいきます:
<div ng-app="myApp" scroll id="page">
<header></header>
<section></section>
</div>
app = angular.module('myApp', []);
app.directive("scroll", function ($window) {
return function(scope, element, attrs) {
angular.element($window).bind("scroll", function() {
if (this.pageYOffset >= 100) {
element.addClass('min');
console.log('Scrolled below header.');
} else {
element.removeClass('min');
console.log('Header is in view.');
}
});
};
});
(ウィンドウをヘッダーの下にスクロールすると、100ピクセル、クラスが切り替わります)
私が間違っている場合は訂正してください。ただし、これはAngularでこれを行う正しい方法ではないと感じています。
代わりに、これを行うための最良の方法は、ng-classを使用し、スコープにブール値を格納することであると推測しました。このようなもの:
<div ng-app="myApp" scroll id="page" ng-class="{min: boolChangeClass}">
<header></header>
<section></section>
</div>
app = angular.module('myApp', []);
app.directive("scroll", function ($window) {
return function(scope, element, attrs) {
angular.element($window).bind("scroll", function() {
if (this.pageYOffset >= 100) {
scope.boolChangeClass = true;
console.log('Scrolled below header.');
} else {
scope.boolChangeClass = false;
console.log('Header is in view.');
}
});
};
});
これは動的ではありませんが、スクロールコールバックでscope.boolChangeClassの値を変更すると、ng-classが更新されません。
だから私の質問は、ユーザーが特定のポイントの下にスクロールしたときに、AngularJSを使用して#pageのクラスを切り替えるのに最適な方法は何ですか?