【发布时间】:2015-02-03 02:10:24
【问题描述】:
首先,我知道这个帖子:
Activating bootstrap dropdown menu on hover
Bootstrap Dropdown with Hover
How to make twitter bootstrap menu dropdown on hover rather than click
还有其他人,但仍未找到正确的解决方案,这是我到目前为止所做的。
首先,我使用了 angular-bootstrap 下拉指令中的 is-open 属性,如下所示:
<span class="dropdown" dropdown is-open="status.isopen">
<a
href
class="dropdown-toggle"
ng-mouseenter="status.isopen = true"
ng-mouseleave="status.isopen = false"
>
hover me for a dropdown with angular-bootstrap
</a>
<ul
class="dropdown-menu"
>
<li ng-repeat="choice in items">
<a href>{{choice}}</a>
</li>
</ul>
</span>
这似乎可行,但出现了 2 个错误:
- 第一个是当点击下拉切换元素时,下拉菜单消失了,再次点击不会把它带回来你必须鼠标离开,然后鼠标进入下拉切换以恢复下拉菜单。
- 第二个是css/html问题。
通常下拉菜单的常规 css 解决方案是这样的:
<a class="css-dropdown">
hover here with css.
<div class="css-dropdown-menu">
<p>item 1</p>
<p>item 2</p>
<p>item 3</p>
</div>
</a>
注意下拉菜单现在位于下拉切换元素内,这意味着当用鼠标从下拉切换到下拉菜单时,它会从父级移动到子级,所以基本上我们仍然悬停在下拉开关上,因为我们是它的孩子,这意味着下拉菜单仍然可见,另一方面,引导下拉菜单与点击事件一起使用,因此将下拉菜单作为下拉菜单的孩子-不需要切换,但是现在当有人想在鼠标离开下拉菜单时将行为更改为鼠标输入/悬停时,下拉菜单会消失,因此我们不再可以访问下拉菜单元素,这在 @987654324 中可见@
为了修复第一个错误,我刚刚删除了下拉指令,然后将 is-open 替换为 ng-class 指令,如下所示。
改变这个:
<span class="dropdown" dropdown is-open="status.isopen">
到这里:
<span class="dropdown" ng-class="{'open': status.isopen}">
其余部分与修复第一个错误的plunker 保持一致。
第二个错误很棘手,因为下拉菜单不再是下拉切换的子项,从切换到菜单时悬停效果不会持续,所以我这样做了。
改变了这个:
<ul class="dropdown-menu">
到这里:
<ul
class="dropdown-menu"
ng-mouseenter="status.isopen = true"
ng-mouseleave="status.isopen = false"
>
做到了,但是在单击下拉菜单项时出现了另一个错误,它保持打开状态,所以我一直这样做。 改变了这个:
<li ng-repeat="choice in items">
到这里:
<li ng-repeat="choice in items" ng-click="status.isopen = false">
这给了我所需的行为plunker。
也就是说,这不是一个好的解决方案,因为这里涉及很多指令以获得简单的视觉效果,我提供的最后一个 plunker 包含一个不涉及 Bootstrap 或 AngularJS 的 css 解决方案,尽管它是必需的行为,但不是必需的html 结构或视觉结果,我需要的是在下拉切换和下拉菜单之间有一个空格,而不是切换元素的填充只是一个空白,这使得 css 解决方案在这种情况下无效。
那么,我的问题是否有更好的方法来做到这一点,而无需为悬停下拉菜单添加新的插件/库更干净且易于重用的解决方案?
【问题讨论】:
-
您解决了这个问题吗?还是它仍然开放,我认为现在应该关闭:)
-
不,我没有在这方面工作,但我有太多其他的东西,它仍然使用我在这里提到的相同的 hack :(,如果你有一个更好的解决方案清洁器和更少的指令,我接受建议。
-
让我查一下,我会回复你的
-
您好,除了上面提到的以外,您还有什么好的解决方案
-
@AvinashSolanki,没有。
标签: css angularjs twitter-bootstrap drop-down-menu angular-bootstrap