AngularJSディレクティブの要素にスクロールイベントをバインドするにはどうすればよいですか?
$ windowでスクロールをバインドしますが、このクラス ".body-wrapper"に変更する必要があります(angular.element(document.queryselector(.body-wrapper))は機能しません)。
何か案は ?
angular.element($window).bind("scroll", function () {
...
})
動作しない理由はありません。
この簡単な例では、
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
angular.element(document.querySelector('.myDiv')).bind('scroll', function(){
alert('scrolling is cool!');
})
});
何らかの理由で機能しない場合は、完全なコードを投稿してください。
ディスカッション後に編集:
最終的に問題は「スクロール」の特定のイベントにあり、おそらく別のイベントと衝突します。
イベントを「マウスホイール」に変更すると、うまくいきました。
通常は、そのための新しいディレクティブを作成します。
app.directive('scroll', [function() {
return {
link: function (scope, elem, attrs) {
elem.on('scroll', function (e) {
// do your thing
});
})
}
}]);
さて、スクロールイベントを追加する必要がある場所でこのディレクティブを使用してください。
<div class='.body-wrapper' scroll></div>
ディレクティブは、angular.element
の代わりに、AngularjsのDOM要素にアクセスするための優先的で簡潔なアプローチです。
mousewheelイベントは、scrollイベントよりもウィンドウへのスクロールイベントをトリガーします。
angular.element($window).bind('mousewheel', function () {
// enter code here
}
私が見つけた最もクリーンな方法は次のとおりです。
(function() {
angular
.module('yourAppName')
.directive('scrollDirective', ['$window', scrollDirective])
function scrollDirective($window) {
return {
link: function (scope, element, attrs) {
var handler;
$window = angular.element($window);
handler = function() {
console.log('scrolling....')
};
$window.on('scroll', handler);
}
};
};
})();
次に、Htmlで次のように使用できます。
<div scroll-directive="">a long list goes here</div>