我在 AngularJS + Node.js 应用程序上实现了无限滚动功能。
它基于这个 JSfiddle 并且工作方式相同:http: //jsfiddle.net/vojtajina/U7Bz9/ HTML:
<div id="fixed" when-scrolled="loadMore()">
<ul>
<li ng-repeat="i in items">{{i.id}}</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);
}
});
};
});
</p>
我实现无限滚动的原因是为了节省我的用户带宽,除非用户想查看所有结果,否则不加载所有 1000 个结果及其相应的图像。
但是,当使用 AngularJS 过滤器在结果中搜索时,我遇到了问题,因为当然不是所有的结果都在那里(除非用户滚动到最底部),所以搜索只会返回所需结果的一小部分。
然后我删除了无限滚动功能以使搜索功能正常工作,但这在我打开页面时在 chrome 上(不是在 Firefox 上)提供了新问题,浏览器开始从顶部加载图像。如果我然后通过搜索以“z”开头的内容(在结果的最底部)来过滤结果,Firefox 会切换焦点并首先加载以“z”开头的结果(因为它们是唯一显示的结果)。然而,chrome 会继续通过列表加载,因此一旦加载了应用程序中的所有图像,用户只会看到他们的搜索结果(对于“z”)。
我正在寻找一种方法让 angular 同时在结果上提供无限滚动和适当的搜索过滤器。如果这是不可能的,那么一种让chrome首先加载可见图像的方法。
我目前正在尝试一些奇怪的东西,在范围内有一堆不同的数组,但到目前为止我还没有运气。