【问题标题】:Infinite scroll when scrolling upward inside a div在 div 内向上滚动时无限滚动
【发布时间】:2015-12-25 10:31:29
【问题描述】:

我正在使用 AngularJS 和 Laravel 构建一个聊天系统。

我想使用 AngularJS 在 div 容器中创建一个无限滚动条。我想要的是一个聊天框,当用户点击用户名时,它将显示最后 30 条聊天消息;当用户在容器(而不是浏览器窗口)中向上滚动时,我想运行一个 AJAX 请求并获取之前的 30 条记录,就像我们在 facebook 聊天应用程序中所做的那样。

这是我的 HTML 代码:

<ul class="chats" ng-repeat="chatData in DataChats">
    <li>
        <div class="message">
            <a> {{chatData.sender_fname }} </a>
            <span class="body"> {{chatData.message }} </span>
        </div>
    </li>
</ul>   

和循环js代码

$scope.showChat = function(chat_id) {
    $http.get(url+'/chat/'+chat_id).success(function(data){
        $scope.DataChats= data;
    });
}   

我已经搜索了 AngularJS 的依赖项,但我只为像 Ng infinite scroll 这样的浏览器找到了这个。我怎样才能把容器变成一个 Facebook like chat when we scroll up and it shows previous messages?

这就是我想要实现的目标:

【问题讨论】:

    标签: javascript jquery angularjs laravel infinite-scroll


    【解决方案1】:

    ngInfiniteScroll 也支持容器无限滚动(ref),但我推荐使用ui-scroll。它有更多的能力。 This 也会回答你的问题。

    您可以使用ui-scroll-viewport 为容器使用ui-scroll。

    <ANY ui-scroll-viewport>
          ...
    </ANY>
    

    这个demohtmlscript 的源代码就是你所需要的一个简单的示例。

    demo的主要script在coffeescript中,这里是demo的javascript代码:

    angular.module('application', ['ui.scroll', 'ui.scroll.jqlite']).factory('datasource', [
      '$log', '$timeout', function (console, $timeout) {
          var get;
          get = function (index, count, success) {
              return $timeout(function () {
    
                  result = [];
                  var i = index;
                  for (i; i < index + count - 1 ;i++ ) {
                      result.push("item #" + i);
                  }
                  return success(result);
              }, 100);
          };
          return {
              get: get
          };
      }
    ]);
    angular.bootstrap(document, ["application"]);
    

    正如文档中提到的,您所要做的就是实现get 函数。

    here ,我为您提供了一个 plunker 来展示从 json 文件中获取数据的示例。

    【讨论】:

    • 谢谢@AM,我之前也看过这篇文章,但我在这里遇到的问题是 ui-scroll 和 ngInfiniteScroll 没有简单的文档和一个我可以遵循和理解的例子,请你给请在这个 ui-scroll 上指导我,因为我如何在我的代码中实现它,我看到这个感到困惑,因为它有很多演示,所以我不知道我应该使用哪个以及它们如何工作,因为它们只是演示没有文档请帮助我
    • @user5184398 我更改了答案以提供指向使用 ui-sroll 的简单示例的链接。
    • here你可以在javascript中找到ui-scroll的主要文件。您的文件旁边需要有ui-scroll-jqlite.min.jsui-scroll.min.js。我将为您提供演示的javascript作为答案。所以你不再需要咖啡了。
    • 不,如果你看到demo,你会发现它使用的是在演示脚本文件中生成的测试数据,如果你想从Json文件中获取数据,你需要使用$http例如 .get() 而不是 for 循环。您必须从 json 中获取数据并将其放入结果中。
    • @user5184398,如果您觉得答案有用,您可以通过点击答案附近的向上箭头和复选标记来投票并接受它:)
    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多