gpt4 book ai didi

javascript - 我如何在angularjs中滚动一个div

转载 作者:数据小太阳 更新时间:2023-10-29 05:50:11 26 4
gpt4 key购买 nike

这很容易用 jQuery 完成:

var msgs = $(".messages ul")

var scroll = false

if( msgs[0].scrollHeight === (msgs.scrollTop() + msgs.outerHeight() ) )
{

scroll = true

}
$scope.messages.push(data)
if(scroll)
{

setTimeout(function(){

msgs.scrollTop(msgs[0].scrollHeight) // Allow it to update!

},0)


}

为了提供一些上下文,ul 是消息的容器,我遍历 $scope.messages 中的数组,如果容器滚动到底部,它将粘在底部。这个实现对我有用。

现在,我最近了解到一个人不应该真正在 angular 中使用 jQuery。但我想知道,我如何在纯 AngularJS 中实现这样的东西?

最佳答案

您可以创建一个指令,该指令将有一个变量,当该变量为 true 时将转到顶部,并且一旦不再位于顶部就会将其自身设置为 false。

使用方法:

 <div scroll-to-top="isAtTop">
<li ng-repeat="stuff in items">{{stuff}}
<a ng-click="isAtTop = true">Scroll to Top</a>
</div>

这是一个指令(没有测试,但应该有效):

angular.module('myApp').directive('scrollToTop', function() {
return {
restrict: 'A',
link: function(scope, elm, attr) {
var isTop;
//bind changes from scope to our view: set isTop variable
//depending on what scope variable is. If scope value
//changes to true and we aren't at top, go to top
scope.$watch(attr.scrollToTop, function(newValue) {
newValue = !!newValue; //to boolean
if (!isTop && newValue) {
elm[0].scrollTo(0,0);
}
isTop = newValue;
});

//If we are at top and we scroll down, set isTop and
//our variable on scope to false.
elm.bind('scroll', function() {
if (elm[0].scrollTop !==0 && isTop) {
//Use $apply to tell angular
//'hey, we are gonna change something from outside angular'
scope.$apply(function() {
//(we should use $parse service here, but simple for example)
scope[attr.scrollTop] = false;
isTop = false;
});
}
});

}
};
});

关于javascript - 我如何在angularjs中滚动一个div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com