Comment implémenter le chargement progressif du contenu lorsque vous faites défiler la page? Sinon, 1000 images seraient chargées en même temps.
Je ne voulais pas utiliser ngInfiniteScroll
l'autre gars posté car mon application mobile n'utilise pas jQuery, il est donc inutile de la charger pour cela.
En tout cas, j'ai trouvé un jsfiddle avec du Javascript pur qui résout ce problème.
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);
}
});
};
});
Utilisez la directive infinite scrolling. 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);
}
};
});
J'ai créé un module qui fait à peu près la même chose que ngInfiniteScroll, mais ne dépend pas de jQuery. Il prend en compte le redimensionnement de la fenêtre. ngInfiniteScroll ne fonctionnait pas correctement dans mon application, j'ai donc construit la mienne et elle est beaucoup plus légère.
Ben Nadel a une bonne solution pour cela, où il prend en compte le redimensionnement de la fenêtre et du document. Il évite également de repeindre après chaque nœud ng-repeat. Vérifiez-le .