Когда пользователь прокручивает окно своего браузера ниже определенной точки, я перехожу к классу #page div.Связать класс с переключением на событие прокрутки окна
То, что я сделал до сих пор работает отлично:
<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.');
}
});
};
});
(когда они прокручивать их окна под заголовком, 100px, класс переключен)
Хотя, поправьте меня если я ошибаюсь, я считаю, что это не правильный способ сделать это с помощью Angular.
Вместо этого я предположил, что лучшим способом для этого было бы использование ng-класса и сохранение булевского значения в области. Что-то вроде этого:
<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 в скроллинга обратного вызова, то нг-класс не обновляется.
Итак, мой вопрос: как лучше всего переключить класс #page, используя AngularJS, когда пользователь прокручивается ниже определенной точки?
У меня была точно такая же проблема сегодня :) И я решил это точно так же (вторая версия)! Я также не понимаю, почему ng-класс не обновляется, но если вы перевариваете (просто добавьте $ scope. $ Apply() после изменения boolChangeClass), он работает. –
Спасибо @Flek, что сработало отлично :) – StuR
Я на самом деле просто смущен, почему нам нужно явно позвонить, чтобы вызвать переваривание, потому что мы не используем какую-либо стороннюю библиотеку, все является Угловой. Mhh ... Может быть, кто-то узнает :) –