Wie implementiere ich das progressive Laden von Inhalten, wenn Sie auf der Seite nach unten scrollen? Andernfalls würden 1000 Bilder gleichzeitig geladen.
Ich wollte ngInfiniteScroll
nicht verwenden, da der andere Typ bereits gepostet wurde, da meine mobile App jQuery nicht verwendet.
Ich habe aber trotzdem ein jsfiddle mit reinem Javascript gefunden, das dieses Problem löst.
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);
}
});
};
});
Verwenden Sie die Anweisung 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);
}
};
});
Ich habe ein Modul erstellt, das ungefähr das gleiche wie ngInfiniteScroll macht, aber nicht von jQuery abhängig ist. Es berücksichtigt jedoch die Fenstergröße. ngInfiniteScroll hat in meiner Anwendung nicht richtig funktioniert, also habe ich meine eigene erstellt und es ist viel leichter.
Ben Nadel hat dafür eine gute Lösung, indem er sowohl die Fenstergröße als auch die Dokumentgröße berücksichtigt. Er vermeidet auch eine Neulackierung nach jedem Wiederholungsknoten. Hör zu .