【发布时间】:2026-01-16 15:15:01
【问题描述】:
我正在尝试创建一个 angularjs 引导手风琴,它在打开时将手风琴滚动到顶部。
这些解决方案与我想做的很接近:
- AngularJS / ui-bootstrap accordion - scroll to top of active (open) accordion on click
- https://www.peterbouda.eu/making-an-angular-ui-bootstrap-accordion-scrolling-to-top-when-opening.html
但是,它们使用超时或范围监视。除非绝对必要,否则我想避免使用这些。
有没有办法在不使用$watch 或setTimeout 的情况下做到这一点?
这是我正在尝试做的事情,这是使用 $watch:https://plnkr.co/edit/XQpUdrdjqaCGom4L9yIJ
app.directive( 'scrollTop', scrollTop );
function scrollTop() {
return {
restrict: 'A',
link: link
};
}
function link( scope, element ) {
scope.collapsing = false;
var jqElement = $( element) ;
scope.$watch( function() {
return jqElement.find( '.panel-collapse' ).hasClass( 'collapsing' );
}, function( status ) {
if ( scope.collapsing && !status ) {
if ( jqElement.hasClass( 'panel-open' ) ) {
$( 'html,body' ).animate({
scrollTop: jqElement.offset().top - 30
}, 500 );
}
}
scope.collapsing = status;
} );
}
【问题讨论】:
-
你能告诉我们你的代码和手表吗?
-
@Dalorzo 我已经用 plunkr 代码更新了我的问题
标签: angularjs angularjs-directive angularjs-scope angular-ui-bootstrap