无限滚动会导致快速滚动时跳转到屏幕顶部

时间:2015-02-05 00:54:18

标签: javascript angularjs infinite-scroll nginfinitescroll

我在我的网站上使用ng-infinite-scroll Angular指令,整体效果很好。但是,在测试时我注意到如果我快速滚动页面会跳回到顶部。下面是我的html和我的滚动功能。我认为问题在于如何处理$scope.busy

HTML:

<div class="row inner" infinite-scroll="loadImages()" infinite-scroll-distance="1" infinite-scroll-disabled="busy">

  <h2 class="headline">{{event}}</h2>
  <h3 class="headline">{{city}}, {{state}}</h3>

  <div class="col-md-3 col-sm-4 col-xs-12 img-container" ng-repeat="photo in photos">

    <a ng-href="{{photo.link}}" target="_blank" title="{{photo.text}}"><img ng-src="{{photo.img}}" onerror="imgError(this);" alt="" class="img-responsive insta" id="image"></a>

    <div class="prof-circ" title="{{photo.username}}"><a ng-href="http://instagram.com/{{photo.username}}" target="_blank"><img ng-src="{{photo.profile}}" onerror="anonImg(this);" alt="" class="circular"></a></div>

</div>

控制器代码:

$scope.loadImages = function() {

    if ($scope.busy) return;
    $scope.busy = true;
    $scope.limit += 20;

    Events.get($scope.id,$scope.limit).success(function(response) {
        $scope.photos = response.photos.reverse();
        $scope.busy = false;
    });
}

2 个答案:

答案 0 :(得分:2)

你的样式表要非常小心......我在DOM上有一个css类来防止显示那些没有加载图片的项目,这个css类在加载图片后被删除了。然而,ng-infinite-scroll将ng-repeat DOM替换为原始的默认HTML模板(以及CSS类!),因此,在短时间内,css类使项目的高度基本为零。这当然迫使我到了页面的顶部。

答案 1 :(得分:0)

我成功地将父元素的min-height设置为具有无限滚动的元素的当前高度,如下所示:

$scope.show_more_results = function() {
  $("#my-results-parent").css("min-height", function(){
    return $("#my-results").height();
  });
  // other code loading results here
};

使用html:

<div id="#my-results-parent">
  <div id="#my-results" infinite-scroll="show_more_results()">
  </div>
</div>