javascript - 在 AngularJS 中滚动到 div 的顶部?

标签 javascript jquery html css angularjs

我正在为一个小型网络应用程序使用 AngularJS,但遇到了一个问题。我正在使用 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>

最佳答案

我遇到过同样的问题,我通常使用以下通用指令解决它。它监听给定的事件,每当该事件发生时,它都会将元素滚动回 y = 0。您需要做的就是 $broadcast 列表更改时 Controller 中的事件。

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">

关于javascript - 在 AngularJS 中滚动到 div 的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040985/

相关文章:

javascript - 是否可以使用 Ext.js 实现可移动的工具栏,如果可以,如何使用我的代码实现?

javascript - 如何知道 div 的滚动条何时到达底部 - JQuery

jquery - Kendo Multiselect值设置Bug

html - 文字装饰 : none on anchor tag is not working

php - 如何为视频添加动态链接?

html - 重用 CSS 形状

asp.net - 在 ckEditor 中单击保存会触发什么事件?

javascript - 隐藏 div 的高度不会随 Masonry 内容扩展

javascript - react native ,单击按钮时加载组件

jquery - 在 jquery 中我可以链接 .filter 两次吗?