【发布时间】:2024-01-24 12:52:01
【问题描述】:
在阅读文档和示例并使用基本的 ngAnimate - css3 转换实现它后,我有一个工作菜单,但我真的不知道如何去做,所以请耐心等待。
- 如何一次只切换 1 li 子菜单,并且不让另一个因为溢出而打开
- 单击该菜单/子菜单之外的任何位置(如果可能)关闭活动子菜单
- 我的 css3 ngAnimate 正在为没有子项的 li 元素设置动画,我如何检查它并仅在它有子项时为其提供切换类?
这是我的菜单的 html 代码,我正在使用 ng-repeat 重复 li,它是来自我的控制器的子菜单 -
<ul class="navigation">
<div class="" layout="column">
<li md-ink-ripple="#ebeef4"
ng-repeat="item in items"
class="item {{item.id}}"
ng-click="states.activeItem=item.title;
itemClicked = !itemClicked">
<span>
<i class="material-icons md-24 center-icons">{{item.icon}}</i>
</span>
<a class="title" ng-href="#!{{item.route}}">{{item.title}}</a>
<span>
<i class="material-icons md-18 subicon-openstate" id="test-icons">{{item.subicon}}</i>
</span>
<ul class="submenu" id="submenu-item-hover" ng-if="itemClicked">
<li ng-repeat="subItem in item.subItems" class="subItem">
<a href="#!{{subItem.subroute}}">{{subItem.title}}</a>
</li>
</ul>
</li>
</div>
</ul>
你可以看到我在子菜单上使用 ng-if,即第二个 ul 来检查它是否被点击,当它返回 true 时,它使用这个 css 代码 -
#submenu-item-hover.ng-enter {
transition: all ease-in 0.3s;
height: 0px;
opacity: 0;
}
#submenu-item-hover.ng-enter.ng-enter-active {
height: 144px;
opacity: 1;
}
#submenu-item-hover.ng-leave {
height: 144px;
opacity: 1;
}
#submenu-item-hover.ng-leave.ng-leave-active {
transition: all ease-in 0.3s;
height: 0px;
opacity: 0;
}
但问题是,如果我仅单击 li 中的 1 个子项,它会打开/关闭正常,但是当我单击第 2 个时,它也会打开导致垂直溢出(sidenav) 如果我点击没有子菜单的 li 也打开到 144px 高度:s 那么我该怎么做呢?最后还有如何编写 onclick(外部菜单功能)来切换(关闭)活动子菜单。
编辑-也添加控制器文件
控制器 -
app.controller('NavigationController', function($scope) {
$scope.states = {};
$scope.states.activeItem = '';
$scope.items = [{
id: 'item1',
title: 'Dashboard',
icon: 'dashboard',
subicon: 'arrow_drop_down',
route: 'dashboard',
subItems: [{
title: 'Page Visitors',
subroute: 'page-visitors',
},
{
title: 'Post Performace',
subroute: 'post-performance',
},
{
title: 'Team Overall',
// subroute: '/team-overall',
}
]
}, {
id: 'item2',
title: 'Calendar',
icon: 'calendar_today',
}, {
id: 'item3',
title: 'Inbox',
icon: 'inbox',
subicon: 'unfold_more',
subItems: [{
title: 'New Mail',
// subroute: '/new-mail',
},
{
title: 'Scoial',
// subroute: '/new-social',
},
{
title: 'Updates',
// subroute: '/new-updates',
}
]
}, {
id: 'item4',
title: 'Invoicing',
icon: 'insert_drive_file',
}, {
id: 'item5',
title: 'Lab / Experimental',
icon: 'build',
}];
});
【问题讨论】:
-
感谢您的编辑。如果这个问题已经得到解答,任何人都可以将我链接到与帖子相关的主题。我真的很感激。
-
您能在fiddle 上分享您的工作示例吗?
标签: javascript css angularjs angularjs-directive ng-animate