我正在尝试使用Vue Transition上下添加Bootstrap 4下拉菜单上的滑动。
过渡不起作用
我尝试使用过渡元素,但动画不起作用。
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
For Individuals
</a>
<transition name="list">
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Income Tax Return</a>
<a class="dropdown-item" href="#">TDS</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Legal Services</a>
</div>
</transition>
</li>
.list-enter {
opacity: 0;
}
.list-enter-active {
animation: slide-in .5s ease-out forwards;
}
.list-leave-to, .list-leave-active {
opacity: 0;
animation: slide-out .5s ease-out forwards;
}
@keyframes slide-in {
from {
transform: translateY(20px);
}
to {
transform: translateY(0);
}
}
@keyframes slide-out {
from {
transform: translateY(0);
}
to {
transform: translateY(20px);
}
}
下拉菜单应滑入并滑出
VUE将仅在某些条件下检测并应用过渡。请阅读过渡单元素/组件。因此,在这种情况下,我认为v-show
是我们最好的选择。
,您的模板应该是:
<div id="app">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Dropdown button
</button>
<transition name="menu">
<div class="dropdown-menu" v-show="show">
<a class="dropdown-item">Action</a>
<a class="dropdown-item">Another action</a>
<a class="dropdown-item">Something else here</a>
</div>
</transition>
</div>
</div>
然后,当引导程序显示和隐藏下拉列表时,您必须触发show
变量。您可以通过收听show.bs.dropdown
和hide.bs.dropdown
事件来执行此操作:
let dropdown = $(this.$el).find('.dropdown')
let menu = $(this.$el).find('.dropdown-menu')
dropdown.on('show.bs.dropdown', () => {
this.show = true
})
dropdown.on('hide.bs.dropdown', () => {
menu.css('display', 'block') // This prevent element hide before animation
this.show = false
})
实例示例
注意:在此示例中,我使用margin-top
来制作动画而不是transform
,因为Bootstrap已被使用top
和transform
用于下拉菜单的位置。