我有一个待办事项清单,该清单基于官方vuejs文档中提供的示例。
示例:https://jsfiddle.net/87Lfbzng/
<ul class="todo-list">
<li v-for="todo in filteredTodos" class="todo" :key="todo.id" :class="{ completed: todo.completed, editing: todo == editedTodo }">
<div class="view">
<input class="toggle" type="checkbox" v-model="todo.completed">
<label @dblclick="editTodo(todo)">{{ todo.title }}</label>
<button class="destroy" @click="removeTodo(todo)"></button>
</div>
<input class="edit" type="text" v-model="todo.title" v-todo-focus="todo == editedTodo" @blur="doneEdit(todo)" @keyup.enter="doneEdit(todo)" @keyup.esc="cancelEdit(todo)">
</li>
</ul>
此问题是,无需动画即可立即删除/添加项目。如果我根据官方文档实施transition
标签,则该标签生效。 VueJS transitions
我尝试将转换标签放在ul
内,但这也不起作用。
我当前的尝试:https://jsfiddle.net/87Lfbzng/
CSS
.fade-enter-active,
.fade-leave-active {
transition: opacity .5s;
}
.fade-enter,
.fade-leave-to
/* .fade-leave-active below version 2.1.8 */
{
opacity: 0;
}
标记
<transition name="fade">
<ul class="todo-list">
<li v-for="todo in filteredTodos" class="todo" :key="todo.id" :class="{ completed: todo.completed, editing: todo == editedTodo }">
<div class="view">
<input class="toggle" type="checkbox" v-model="todo.completed">
<label @dblclick="editTodo(todo)">{{ todo.title }}</label>
<button class="destroy" @click="removeTodo(todo)"></button>
</div>
<input class="edit" type="text" v-model="todo.title" v-todo-focus="todo == editedTodo" @blur="doneEdit(todo)" @keyup.enter="doneEdit(todo)" @keyup.esc="cancelEdit(todo)">
</li>
</ul>
</transition>
答案 0 :(得分:2)
您需要将ul
标记替换为transition
标记。然后,将标记属性添加到transition
标记,其值为 ul 。
<transition-group name="fade" tag="ul" class="todo-list">
https://jsfiddle.net/ducwpeam/
官方文档以ul
为例:VueJs Documentation: List Moves
答案 1 :(得分:0)
您可以使用普通的CSS完成此操作
.view {
animation: fade-anim 0.4s ease
}
@keyframes fade-anim {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
答案 2 :(得分:0)
您只将ul
包裹在transition
中...这将无济于事。因为您的ul
是静态的:
Vue提供了一个转换包装器组件,允许您在以下上下文中为任何元素或组件添加输入/离开转换:
有条件的渲染(使用v-if)
有条件的显示(使用v-show)
动态组件
组件根节点
相反,您需要将li
元素包装在transition
标记内,这一次它将是transition-group
,因为您有两个以上的元素:
<ul>
<transition-group name="fade">
<li></li>
<li></li>
...
</transition-group>
</ul>