javascript - $timeout scrollTop 指令在 angularJS 中不起作用

标签 javascript html angularjs

我正在尝试用 angularJS 进行一次简短的聊天。我使用 div 来显示消息,并且希望在页面加载时向下滚动我的 div。我创建了一个指令来做到这一点。

我的 HTML:

<div id="myChat" style="height: 500px; overflow-y: scroll;border: 1px solid #ccc;border-radius: 4px;" scroll-bottom>
    <div ng-repeat='message in chatMessagesArray'><span style="color:green">aaa</span><span> bbb</span></div>
</div>

我的 Angular Directive(指令):

.directive('scrollBottom', ['$timeout' , function ($timeout) {
  return {
    link: function (scope, element) {
      $timeout(function () {
        console.log($(element).scrollTop())
        $(element).scrollTop($(element)[0].scrollHeight)
      })
    }
  }
}

在控制台上,我看到 console.log() 的输出为 0,所以我知道该指令已触发,但第二行尚未完成...您知道可能出了什么问题吗?在 MAC OS X + Chrome/FF 上测试

最佳答案

试试这个。这里我添加了1秒的超时。页面加载后立即滚动,只需删除毫秒部分

var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
  $scope.chatMessagesArray = ["a", "b", "c", "d", "e", "f"];
});
app.directive('scrollBottom', ['$timeout',
  function($timeout) {
    return {
      link: function(scope, element) {
        $timeout(function() {
          $(element).scrollTop($(element)[0].scrollHeight)
        })
      }
    }
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  <div id="myChat" style="height: 500px; overflow-y: scroll;border: 1px solid #ccc;border-radius: 4px;" scroll-bottom>
    <div ng-repeat='message in chatMessagesArray'> <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
      <span style="color:green">aaa</span>
      <br>
      <span> bbb</span>
      <br>
    </div>
  </div>
</div>

关于javascript - $timeout scrollTop 指令在 angularJS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40039169/

相关文章:

angularjs - 如何从父对象重新调整集合中的项目

javascript - 二分键的数据/逻辑结构(JS)

html - 如何将数据库显示到表中,文本直接往下走

javascript - 自定义 CSS(质量)

html - 如何编写没有值的可选属性来显示/隐藏某些 block ?

javascript - 仅针对某个范围内的数字动态创建 ng-pattern 的正则表达式

javascript - 在单个页面中引入多个加载器: React JS

javascript - 警告 : Each child in a list should have a unique "key" prop. - ReactJS

javascript - ESLint 规则排除 Angular 中的某些关键字和短语?

php - 使用 &amp;amp;amp;amp;amp;在查询字符串中