【发布时间】:2019-09-25 13:59:45
【问题描述】:
使用 Vue,我有两个 div 想要通过转换进行切换。我想在点击时慢慢地将 div 扩展到我想要的宽度,然后在再次点击时缩小。我可以让 div 一键展开,但不知道如何在第二次点击时缩小它。
不清楚是否仅指定 div 的宽度就足够了,或者我是否还必须在 css 过渡类中指定相同的宽度。
这个小提琴展示了我一直在尝试的东西:https://jsfiddle.net/vxmh8auo/1/
JS
new Vue({
el: '#app',
data: {
showButton: true
},
methods: {
randomise () { this.n = Math.random() }
},
components:{'input-div':blah}
});
CSS
.interaction {
border: 10px solid lightgreen;
display: flex;
flex: 1 0 auto;
max-height: 225px;
transition: max-height 0.25s ease-out;
}
.default {
width: 20px;
}
.bigger{
width: 200px;
}
.expand-enter-active, .expand-leave-active {
transition-property: width;
transition-duration: 5s;
}
.expand-leave-to {
width: 200px;
}
.expand-enter{
width: 20px;
}
HTML
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
<div class="interaction">
<button @click="showButton=!showButton">
<transition name="expand" mode="out-in">
<div v-if="showButton" v-bind:class="showButton ? 'default':'bigger'" key="small"> B </div>
<div v-else class="bigger" key="big"> Bigger </div>
<!--<input-div><</input-div>-->
</transition>
</button>
</div>
</div>
【问题讨论】:
-
您想扩大和缩小同一个元素,还是想从 DOM 中移除一个元素并在点击时插入另一个元素?
-
@MarcRo 我想从 DOM 中删除一个元素并插入另一个元素。为此,我试图简化,但我想做的是用组件(宽度较大)替换按钮(宽度较小),并让 div 增长以包含单击时的组件....
-
更像是在jsfiddle.net/ba38Ln59/1修复小提琴
-
啊!好的。给两个组件(在它们的 CSS 中)你希望它们具有的最终宽度。在
<transition>元素中,您可以将max-width从 0 转换为任意大的数字。 -
@MarcRo - 第一个元素是一个按钮,第二个元素应该是一个组件(或者在我的小提琴中是一个包含组件的 div)。仍然不清楚这应该如何工作......我的用例本质上是一个带有搜索图标的按钮,单击该按钮会扩展为包含输入框的搜索组件,用户可以在其中输入搜索内容......
标签: vue.js vuejs2 transition