当前位置: 首页 > 知识库问答 >
问题:

滚动到AngularJS中div的顶部?

丁承德
2023-03-14

我正在使用AngularJS开发一个小型web应用程序,遇到了一个问题。我正在使用ng repeat填充div内部的列表。div有一个固定的高度,并设置为overflow-y:auto,这意味着当列表对于div来说太大时会出现一个滚动条。我的问题是,当重新绘制列表时,即支持ng repeat的数据会发生变化,滚动条不会重置为div的顶部。相反,它会保持在ng repeat更改之前滚动条所在的任何位置。这是一个非常糟糕的用户体验。我尝试了以下方法,但没有任何运气:

<div id="myList">
  <ul>
    <li ng-repeat="item in items">{{item}}</li>
  </ul>
</div>

<a ng-click="switchItems()">Switch</a>

<script>
function MyApp($scope) {
  $scope.switchItems = function() {
    $('#myList').scrollTop();
    $scope.items = [1, 2, 3, 4]; // new items
  };
}
</script>

共有3个答案

梁华清
2023-03-14

我在表体滚动时也遇到过同样的问题。我用以下方法解决了这个问题。

这是我的html示例。

<table id="rateplanmapping-scroll">
    <thead>
       <th></th>....
    </thead>
    <tbody >
        <tr ng-repeat="data in datas"> //this is the data
            <td></td>.....
        </tr>
    </tbody>
</table>

这是滚动到顶部的角度代码

<script>

  angular.element("#rateplanmapping-scroll tbody")[0].scrollTop=0; 

</script>


你可以把这个脚本放在需要的函数中,所以当特定的事情发生时,它会自动触发。或者也可以附加到事件。

对于div元素,可以通过以下方式完成

http://plnkr.co/edit/0B4zrFTho6GYuPAS0S1A?p=preview

谢谢

商业
2023-03-14

我只需添加一个监视DIV内容的指令,然后每当内容发生变化时,它就会滚动到顶部!此解决方案不需要事件处理(我认为这在这里是不必要的)。

mod.directive('scrollToTop', function(){
    return {
        restrict: 'A',
        link: function postLink(scope, elem, attrs) {
            scope.$watch(attrs.scrollToTop, function() {
                elem[0].scrollTop = 0;
            });
        }
    };
});

然后,html标记将使用该指令来触发滚动,从而:

<div class='myList' data-scroll-to-top='data.items.length'>
  <ul>
    <li data-ng-repeat='item in data.items'>{{item}}</li>
  </ul>
</div>

当您向列表中添加项目时,DIV将滚动到顶部!这里是一个jsFiddle与工作代码:http://jsfiddle.net/pkgbtw59/89/

时宾实
2023-03-14

我也遇到过同样的问题,我通常使用以下通用指令来解决它。它侦听给定的事件,并且每当该事件发生时,它将元素回滚到y=0。当列表更改时,您只需在控制器中执行$broadcast事件。

angular.module("ui.scrollToTopWhen", [])
.directive("scrollToTopWhen", function ($timeout) {
  function link (scope, element, attrs) {
    scope.$on(attrs.scrollToTopWhen, function () {
      $timeout(function () {
        angular.element(element)[0].scrollTop = 0;
      });
    });
  }
});

用法:

// Controller
$scope.items = [...];
$scope.$broadcast("items_changed")

// Template
<div id="myList" scroll-to-top-when="items_changed">
 类似资料:
  • 我正忙着建立一个页面,在那里,比赛的计分室将能够看到现场结果,因为评委们会为每个参赛作品打分。 除此之外(每10秒检查一次更新),还有一个功能可以检查舞台上的当前条目(用绿色标记),这将滚动计分室的块,以始终在页面顶部显示当前条目。 然而,这创造了一个无休止的循环上下滚动的整个时间。 初始滚动工作正常,但由于当前项的位置已更改,jQuery再次向下滚动,使该项现在处于新的偏移量。 我的代码当前如下

  • 问题内容: 我正在使用Ajax请求创建聊天,并且试图使消息div滚动到底部没有太多运气。 我将所有内容包装在这个div中: 有没有一种方法可以使用JS将其默认滚动到底部? 有没有一种方法可以在ajax请求后将其滚动到底部? 问题答案: 这是我在网站上使用的内容:

  • 问题内容: 我正在制作一个FAQ页面,顶部有一些按钮可以跳转到一个类别(它跳转到我用作类别标签的标签,例如,用于我的常规类别)。我想添加一个滚动效果,而不仅仅是跳到该类别。我想要类似http://www.dynamicdrive.com/dynamicindex3/scrolltop.htm的内容,该内容可以滚动到页面的所需部分。该链接是一个脚本,该脚本转到页面顶部,具有良好的滚动效果。我需要类似

  • 问题内容: 我正在尝试进行反向无限滚动。我有,我收到了近10篇最近的评论,并希望用户能够滚动评论列表 最多 检索下一个10 -类似FB它显示了最近的评论的“获取前”链接,而是通过滚动事件,而不是链接。 我从http://jsfiddle.net/vojtajina/U7Bz9/开始,尝试将其修改为反向无限滚动,并很快以如下形式结束了: http://jsfiddle.net/digger69/Fw

  • 问题内容: 我正在使用Rails中的Ajax请求创建聊天,并且试图使div滚动到底部没有太多运气。 我将所有内容包装在这个div中: 有没有一种方法可以使用JS将其默认滚动到底部? 有没有办法在ajax请求之后将其滚动到底部? 问题答案: 这是我在网站上使用的内容:

  • 问题内容: 这是我的onCreate,它处理适配器,LinearLayoutManager等。我尝试了每个选项以尝试将其滚动到顶部,但不能。我什至尝试创建自己的自定义LinearLayoutManager。 问题答案: 您尝试过还是? RecyclerView不会在其中实现任何滚动逻辑,而是更加具体,它会根据实现的布局转到特定的索引,在您的情况下是线性的。