我有一些内容和一些链接。我在这里使用 scrollspy。每当我单击一个链接时,它会滚动到特定的 div 和菜单将处于事件状态。但是这里不是滚动,而是我需要隐藏其他 div 并显示特定/匹配的 div。我的意思是这里我需要隐藏和显示内容而不是滚动.这是更新后的代码 https://plnkr.co/edit/VvV7T0FCdXirQfMROwi2?p=preview
HTML
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.4/angular-filter.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-sanitize.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.5.0/ui-bootstrap-tpls.js'></script>
<script src="script.js"></script>
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.css'>
<style type="text/css">
.scroll-div {
height: 300px;
overflow: scroll;
margin-top: 6.5em;
scroll-behavior: smooth;
}
.anchor {
border: 2px dashed red;
padding: 10px 10px 200px 10px;
}
.my-fixed-header {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.my-fixed-header > a {
display: inline-block;
margin: 5px 15px;
}
.html{
scroll-behavior: smooth;
}
</style>
<body ng-app="app">
<div ng-controller="AccordionDemoCtrl">
<div class="my-fixed-header">
<a href="index.html#/#anchor{{x}}" ng-click="gotoDiv(x)" ng-repeat="x in [1,2,3,4,5]">
Go to Div {{x}}
</a>
<div style="border:1px solid;padding:20px;width:100%;background:yellow;">Header</div>
</div>
<div class="scroll-div">
<div style="border:1px solid;" id="anchor{{group.id}}" ng-repeat="group in groups | filter:item.value ">
<div class="parents" ng-click="open(group)">{{ group.title }}
</div>
{{ group.content }}
<ul class="childs" ng-show="group.isOpen">
<li ng-repeat="item in group.list">
<span ng-bind-html="item"></span>
</li>
</ul>
</div>
</div>
</div>
</body>
脚本
var app=angular.module('app', ['ui.bootstrap','ngSanitize','angular.filter']);
app.controller('AccordionDemoCtrl', function ($scope,$location,$anchorScroll) {
$scope.oneAtATime = true;
$scope.gotoDiv = function(x) {
$scope.groups.forEach(a=>{
console.log(x);
a.isOpen = true;
});
};
$scope.groups = [
{
title: 'title 1',
id:'1',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 1',
id:'1',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 2',
id:'2',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 3',
id:'3',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 4',
id:'4',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 5',
id:'5',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
}
];
$scope.groups[0].isOpen = true;
});
最佳答案
您需要为每个 div 设置可见性,然后根据链接点击切换它...为此,我们需要将每个对象的可见性状态存储在我们的 $scope.groups
数组。我们通过在数组的每个对象中引入一个新变量visible
来做到这一点,我们默认为我们需要显示的对象将其设置为true - 其余的可以在点击链接后显示顶。
检查下面的工作演示:
var app = angular.module('app', ['ui.bootstrap', 'ngSanitize', 'angular.filter']);
app.controller('AccordionDemoCtrl', function($scope, $location, $anchorScroll) {
$scope.oneAtATime = true;
$scope.visibleGrid=-1;
$scope.gotoDiv = function(x) {
$scope.visibleGrid=x;
$scope.groups.forEach(a => {
/* console.log(" we got ID:" + x + " & looking it against the ID:" + a.id); */
a.isOpen = true;
});
};
$scope.groups = [{
title: 'title 0',
id: '0',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 1',
id: '1',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 2',
id: '2',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 3',
id: '3',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 4',
id: '4',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
},
{
title: 'title 5',
id: '5',
list: ['<i>item1a</i> blah blah',
'item2a',
'item3a',
'item4a',
'item5a',
'item6a',
'item7a'
]
}
];
$scope.groups[0].isOpen = true;
});
.scroll-div {
height: 300px;
overflow: scroll;
margin-top: 6.5em;
scroll-behavior: smooth;
}
.anchor {
border: 2px dashed red;
padding: 10px 10px 200px 10px;
}
.my-fixed-header {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.my-fixed-header>a {
display: inline-block;
margin: 5px 15px;
}
.html {
scroll-behavior: smooth;
}
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.4/angular-filter.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-sanitize.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.5.0/ui-bootstrap-tpls.js'></script>
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.css'>
<body ng-app="app" >
<div ng-controller="AccordionDemoCtrl">
<div class="my-fixed-header">
<a href="#{{x}}" ng-click="gotoDiv(x)" ng-repeat="x in [1,2,3,4,5]">
Go to Div {{x}}
</a>
<div style="border:1px solid;padding:20px;width:100%;background:yellow;">Header</div>
</div>
<div class="scroll-div">
<div style="border:1px solid;" id="anchor{{group.id}}" ng-repeat="group in groups | filter:item.value ">
<ng-container ng-if='visibleGrid == group.id || visibleGrid == -1'>
<div class="parents" ng-click="open(group)">{{ group.title }}
</div>
{{ group.content }}
<ul class="childs" ng-show="group.isOpen">
<li ng-repeat="item in group.list">
<span ng-bind-html="item"></span>
</li>
</ul>
</ng-container>
</div>
</div>
</div>
</body>
更新:(在用户评论后)默认显示所有数据,然后在特定点击后,只有相关部分会保持可见
更新#2:(在用户的第 2 条评论之后)没有向 JSON 数据添加任何内容的相同结果
关于javascript - 如何隐藏滚动 spy 中的其他内容而不是滚动到特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655018/