我很想知道哪一个在性能方面更好; 监听一个事件的侦听器的多个实例,或者一个单例来处理该监听过程,然后只返回其他人使用的值?
示例:
function one(){
$window.on('scroll',function(e){
doOne(e.scrollValue);
}
}
function two(){
$window.on('scroll',function(e){
doTwo(e.scrollValue);
}
}
function three(){
$window.on('scroll',function(e){
doThree(e.scrollValue);
}
}
或
var getScrollValue = (function(){
var _scrollValue = 0;
$window.on('scroll',function(e){
_scrollValue = e.scrollValue;
})
return function() {
return _scrollValue;
}
})();
doOne(getScrollValue());
doTwo(getScrollValue());
doThree(getScrollValue());
答案 0 :(得分:0)
我建议你看看我的个人解决方法:
angular.module('myApp',[])
.controller('mainCtrl',function($window, $scope){
$scope.scrollPos = 0;
$window.onscroll = function(){
$scope.scrollPos = document.body.scrollTop || document.documentElement.scrollTop || 0;
$scope.$apply(); //or simply $scope.$digest();
/* IMPORTANT NOTE :
* As $apply() is actully calling $rootScope.$digest() you can
* directly use $scope.$digest() instead of $scope.$apply()
* for better performance depending on context.
* Long story short : $apply() will always work but force
* the dirty checking of all scopes that may cause
* perfomance issue.
*/
};
});
工作JSFiddle here
这里我没有调用任何函数,但您可以根据$scope.scrollPos
值轻松地在onscroll中执行此操作。
我认为不设置太多听众是一种更好的做法。