当打开一个面板时,我需要它滚动回刚刚点击的“.panel-title”的位置。我知道我可以创建一个指令来实现这个功能,比如(从this site中获取):
但这似乎行不通。当您单击第二个面板时,它会打开第一个和第二个面板,并且甚至在打开第三个面板时也不会滚动到顶部。
我只需要它滚动回点击的面板的“.panel-title”。我认为这似乎非常困难,因为大多数情况下面板内容可能会变得相当长,我认为大多数人在打开面板时都想滚动到信息的顶部。
我在这里看到了其他帖子,但它们似乎没有涉及AngularJS。我正在使用“ui-bootstrap-tpls-2.1.3”。
编辑 - {{link1:这是一个Plunker}},如果您愿意,可以尝试一下。
非常感谢任何帮助。
.directive( 'scrollTop', scrollTop );
function scrollTop() {
return {
restrict: 'A',
link: link
};
}
function link( $scope, element ) {
$scope.collapsing = false;
$scope.$watch( function() {
return $(element).find( '.panel-collapse' ).hasClass( 'collapsing' );
}, function( status ) {
if ( $scope.collapsing && !status ) {
if ( $(element).hasClass( 'panel-open' ) ) {
$( 'html,body' ).animate({
scrollTop: $(element).offset().top - 20
}, 500 );
}
}
$scope.collapsing = status;
} );
}
而在HTML中,我应该使用:
<div uib-accordion-group is-open="status.openPanel" scroll-top></div>
但这似乎行不通。当您单击第二个面板时,它会打开第一个和第二个面板,并且甚至在打开第三个面板时也不会滚动到顶部。
我只需要它滚动回点击的面板的“.panel-title”。我认为这似乎非常困难,因为大多数情况下面板内容可能会变得相当长,我认为大多数人在打开面板时都想滚动到信息的顶部。
我在这里看到了其他帖子,但它们似乎没有涉及AngularJS。我正在使用“ui-bootstrap-tpls-2.1.3”。
编辑 - {{link1:这是一个Plunker}},如果您愿意,可以尝试一下。
非常感谢任何帮助。
shown
和hidden
事件而不是使用你的观察器?我怀疑你的观察器触发得太早了。在你的函数上设置一个断点(或者在那里放置一个提示框或控制台日志,或者将bootstrap动画速度调整为较慢的值以夸大时机)。回报你找到的情况。 - adamdport