调整大小完成后运行函数(没有underscope.js)?

时间:2017-07-26 21:20:21

标签: angularjs


从控制器我检测$ window的resize事件,然后重启我的carousel指令。

但问题是,carusel重启了近5-6次。我找不到任何有用的解决方案。

angular.element($window).bind('resize', function () {                                
    $scope.$apply(function(){
          $scope.showCarousel = false;      
          $timeout(function(){
             $scope.calculateGamesCount();
             $scope.showCarousel = true; 
          }, 250);              
    });
});

我如何检测,如果调整大小事件已完成然后运行函数?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有像我们可以加入的“调整大小”这样的事件。每个像素变化都是它自己的独立事件。如果第三方解决方案100%无法解决问题,那么您可以实施自己的本土去抖:

function debounce(f, n){
    let allow_run = true;
    return function(...args){
        if(allow_run){
            allow_run = false;
            setTimeout(_=> allow_run = true, n);
            return f.apply(f, args);
        }
    }
}

window.onresize = debounce(_=> console.log('resizing!'), 250);

基本上,我们有一个看门人,allow_run。如果在门打开时调用去抖动函数,则允许执行,并关闭门,直到超时(n毫秒)到期。如果在门关闭的情况下调用去抖动函数,则不会发生任何事情。

demo