How do I implement progressive loading of content as you scroll down the page? Otherwise 1000 images would load at the same time.
Asked
Active
Viewed 3.9k times
2 Answers
24
Use infinite scrolling directive. ngInfiniteScroll
HTML
<div ng-app='myApp' ng-controller='DemoController'>
<div infinite-scroll='loadMore()' infinite-scroll-distance='2'>
<img ng-repeat='image in images' ng-src='http://placehold.it/225x250&text={{image}}'>
</div>
</div>
JS
var myApp = angular.module('myApp', ['infinite-scroll']);
myApp.controller('DemoController', function($scope) {
$scope.images = [1, 2, 3, 4, 5, 6, 7, 8];
$scope.loadMore = function() {
var last = $scope.images[$scope.images.length - 1];
for(var i = 1; i <= 8; i++) {
$scope.images.push(last + i);
}
};
});
-
Is there a non Jquery solution? as this is for a mobile app. – TheNickyYo Aug 13 '13 at 08:55
-
7By default, AngularJS **does not** use jQuery. And zepto is definitely a bad choice (https://github.com/angular/angular.js/pull/3350) – Utopik Jan 23 '14 at 11:22
17
I didn't want to use ngInfiniteScroll
the other guy posted as my mobile app does not use jQuery so there is no point in loading it just for this.
Anyhow, I found a jsfiddle with pure Javascript that solves this problem.
HTML
<div id="fixed" when-scrolled="loadMore()">
<ul>
<li ng-repeat="i in items"></li>
</ul>
</div>
JavaScript
function Main($scope) {
$scope.items = [];
var counter = 0;
$scope.loadMore = function() {
for (var i = 0; i < 5; i++) {
$scope.items.push({
id: counter
});
counter += 10;
}
};
$scope.loadMore();
}
angular.module('scroll', []).directive('whenScrolled', function() {
return function(scope, elm, attr) {
var raw = elm[0];
elm.bind('scroll', function() {
if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
scope.$apply(attr.whenScrolled);
}
});
};
});

Drewness
- 5,004
- 4
- 32
- 50

TheNickyYo
- 2,389
- 5
- 20
- 28
-
2This solution doesn't deal with page resize (by the user) or div resize, so you could be left with blank space even though there are more items "waiting" to be added. – mmaclaurin Feb 26 '14 at 23:38
-
2This makes use of Angular aswell, just like the infinite scrolling answer EpokK gave. – Guinn May 22 '15 at 11:41