vue 使用 TransitionGroup 写一个宽度 慢慢变长的动画
时间: 2024-03-07 16:49:47 浏览: 184
好的,下面是一个使用Vue的`TransitionGroup`实现宽度慢慢变长的动画的示例代码:
```html
<template>
<div class="wrapper">
<transition-group name="slide" tag="div" class="container">
<div v-for="(item, index) in items" :key="index" class="item" :style="{ width: item.width + 'px' }">
{{ item.text }}
</div>
</transition-group>
<button @click="addItem">添加</button>
</div>
</template>
<script>
export default {
name: 'WidthAnimation',
data() {
return {
items: [
{ text: 'Item 1', width: 0 },
{ text: 'Item 2', width: 0 },
{ text: 'Item 3', width: 0 },
],
};
},
methods: {
addItem() {
const newItem = { text: 'New Item', width: 0 };
this.items.push(newItem);
this.$nextTick(() => {
newItem.width = 200;
});
},
},
};
</script>
<style scoped>
.container {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 20px;
}
.item {
margin-right: 20px;
background-color: #ddd;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
transition: width 1s;
}
.slide-enter-active,
.slide-leave-active {
transition: none;
}
.slide-enter,
.slide-leave-to {
width: 0;
}
</style>
```
在这个示例中,我们使用了Vue的`TransitionGroup`组件来实现动态添加和删除元素的过渡效果。我们在容器中使用`v-for`指令来循环渲染元素,并为每个元素绑定一个宽度的样式。
当我们点击“添加”按钮时,会向数组中添加一个新的元素,并在下一次DOM更新后将其宽度设置为200px,从而触发宽度慢慢变长的过渡动画。
在CSS样式中,我们针对过渡动画添加了`.slide-enter-active`和`.slide-leave-active`两个类名,并将宽度的过渡时间设置为1s。同时,我们还使用了`.slide-enter`和`.slide-leave-to`两个类名来控制元素的宽度变化。
最后,我们将这个组件注册为全局组件,就可以在其他组件中使用了:
```js
import WidthAnimation from './WidthAnimation.vue';
app.component('WidthAnimation', WidthAnimation);
```
在其他组件中使用示例:
```html
<template>
<width-animation></width-animation>
</template>
```
阅读全文