问题描述
当一个面板打开时,我需要让它滚动回刚刚点击的面板的.panel-title".我知道我可以创建一个指令来执行此操作,例如(从 本网站):
.directive( 'scrollTop', scrollTop );函数滚动顶部(){返回 {限制:'A',链接:链接};}函数链接($scope,元素){$scope.collapsing = false;$scope.$watch(函数(){返回 $(element).find('.panel-collapse').hasClass('collapsing');}, 函数(状态){如果( $scope.collapsing && !status ){if ( $(element).hasClass( 'panel-open' ) ) {$( 'html,body' ).animate({scrollTop: $(element).offset().top - 20}, 500 );}}$scope.collapsing = 状态;});}
在我应该使用的 HTML 中:
<div uib-accordion-group is-open="status.openPanel" scroll-top></div>
但这似乎不起作用.当您单击第二个面板时,它会打开第一个和第二个面板,并且在打开第三个面板时它甚至不会滚动到顶部.
我只需要它滚动回被点击的面板的.panel-title".我认为这是非常荒谬的,当很多时间面板内容可能会变得很长时,这似乎很难做到,而且我认为大多数人都希望在打开面板时滚动到信息的顶部.
我在这里看到了其他帖子,但他们似乎没有处理 AngularJS.我正在使用"ui-bootstrap-tpls-2.1.3 "
编辑 - 如果您愿意,这里有一个 Plunker.
非常感谢任何帮助.
这可能是一种快速而肮脏的方法,但效果很好
angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap']).controller('AccordionDemoCtrl', function($scope) {$scope.oneAtATime = true;$scope.groups = [{title: '动态组头 - 1',内容:'动态组主体 - 1'}, {title: '动态组头 - 2',内容:'动态组正文 - 2 动态组头 - 2 动态组头 - 2 动态组头 - 2 动态组头 - 2 动态组头 - 2'}];$scope.items = ['Item 1', 'Item 2', 'Item 3'];$scope.addItem = function() {var newItemNo = $scope.items.length + 1;$scope.items.push('Item ' + newItemNo);};$scope.status = {isFirstOpen: 真,isFirstDisabled: 假};//滚动var 手风琴 = $('.accordion'), 超时;手风琴.on('click', '.panel-heading', function(e) {if(e.target.nodeName != 'SPAN') 返回;var 元素 = this;清除超时(超时);//因为我们不知道动态内容的确切 offsetTop//使用超时350,让angular完成它的渲染超时 = 设置超时(函数(){手风琴.动画({滚动顶部:element.offsetTop -2}, 300);}, 350);});});
.accordion {最大高度:220px;溢出:自动;填充:2px;8px 0 0;}*:focus { 大纲: 无 !important;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.js"></script><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular-animate.js"></script><script src="https://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.0.js"></script><link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="样式表"><div ng-app="ui.bootstrap.demo"><div ng-controller="AccordionDemoCtrl"><script type="text/ng-template" id="group-template.html"><div class="panel {{panelClass || 'panel-default'}}"><div class="panel-heading"><h4 class="panel-title" style="color:#fa39c3"><a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><spanng-class="{'text-muted': isDisabled}">{{heading}}</span></a>
<div class="panel-collapse collapse" uib-collapse="!isOpen"><div class="panel-body" style="text-align: right" ng-transclude></div>