vue给list列表添加动画

这篇博客介绍了如何在Vue.js中实现元素的过渡和动画效果,包括使用Element UI库、设置样式和Vue的过渡组件。示例展示了添加和删除列表项时的动画效果,以及列表项在页面加载时的入场动画。文章还提供了Vue实例和相关方法的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<style>
    li {
        border: 1px dashed #999;
        margin: 5px;
        line-height: 35px;
        padding-left: 5px;
        font-size: 12px;
        width: 100%;
    }

    li:hover {
        background-color: hotpink;
        transition: all 0.8s ease;
        /* // 鼠标移动颜色渐变动画 */
    }

    .v-enter,
    .v-leave-to {
        opacity: 0;
        /* //设置元素的不透明级别: */
        transform: translateY(80px);
        /* // 开始和结束位置在Y轴的80px处 */
    }

    .v-enter-active,
    .v-leave-active {
        transition: all 0.6s ease;
        /* // 从Y轴的80px处渐渐移动到上面 */
    }

    /* 下面的 .v-move 和 .v-leave-active 配合使用,能够实现列表后续的元素,渐渐地漂上来的效果 */
    .v-move {
        transition: all 0.6s ease;
    }

    .v-leave-active {
        position: absolute;
    }
</style>
</style>
    <div>
        <label>
            Id:
            <input type="text" v-model="id">
        </label>

        <label>
            Name:
            <input type="text" v-model="name">
        </label>

        <input type="button" value="添加" @click="add">
    </div>

    <!-- <ul> -->
    <!-- 在实现列表过渡的时候,如果需要过渡的元素,是通过 v-for 循环渲染出来的,不能使用 transition 包裹,需要使用 transitionGroup -->
    <!-- 如果要为 v-for 循环创建的元素设置动画,必须为每一个 元素 设置 :key 属性 -->
    <!-- 给 ransition-group 添加 appear 属性,实现页面刚展示出来时候,入场时候的效果 -->
    <!-- 通过 为 transition-group 元素,设置 tag 属性,指定 transition-group 渲染为指定的元素,如果不指定 tag 属性,默认,渲染为 span 标签 -->
    <transition-group appear tag="ul">
        <li v-for="(item, i) in list" :key="item.id" @click="del(i)">
            {{item.id}} --- {{item.name}}
        </li>
    </transition-group>
    <!-- </ul> -->

</div>

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
        el: '#app',
        data: {
            id: '',
            name: '',
            list: [
                { id: 1, name: '赵高' },
                { id: 2, name: '秦桧' },
                { id: 3, name: '严嵩' },
                { id: 4, name: '魏忠贤' }
            ]
        },
        methods: {
            add() {
                this.list.push({ id: this.id, name: this.name })//追加到列表最后
                this.id = this.name = ''
            },
            del(i) {
                this.list.splice(i, 1)//从第i处删除1个元素
            }
        }
    });
</script>
### 使用 `transition-group` 组件实现在列表头部添加数据时带有的动画效果 为了在 Vue 应用程序中实现当向列表头部添加新数据时带有动画效果的功能,可以利用 `<transition-group>` 组件。此组件允许为列表项定义进入和离开的过渡效果[^1]。 #### HTML 结构与模板 首先,在HTML结构上,需要确保有一个容器用于渲染列表项目,并且该容器被包裹在一个 `<transition-group>` 标签内: ```html <ul> <transition-group name="list-complete"> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </transition-group> </ul> <button @click="addItem">Add Item to Head</button> ``` 这段代码展示了如何通过点击按钮触发函数 `addItem()` 来往数组 `items` 的开头位置插入新的条目,从而模拟向列表添加元素的行为[^2]。 #### JavaScript 部分 接着是在JavaScript部分处理逻辑的地方,这里假设已经初始化了一个名为 `items` 的响应式属性用来存储要显示的数据集合;以及一个方法 `addItem` 被绑定到按钮上的事件监听器,每当调用它就会执行一次操作——即把一个新的字符串加到 `items` 数组最前面的位置上去: ```javascript new Vue({ el: '#app', data() { return { items: ['Item A', 'Item B'] } }, methods: { addItem() { this.items.unshift('New Item'); } } }) ``` 上述脚本片段中的 `.unshift()` 方法会将指定的新成员放置于现有项目的之前,因此每次都会更新视图并触发动画过程[^3]。 #### CSS 过渡样式 最后一步就是编写CSS类来控制具体的视觉变化方式。对于每一个加入或移除的动作都应有对应的样式规则去描述其行为特性。以下是针对上面例子所设计的一套简单的过渡效果: ```css .list-complete-enter-active, .list-complete-leave-active { transition: all .5s ease; } .list-complete-enter-from, .list-complete-leave-to /* .list-complete-leave-active below version 2.1.8 */ { opacity: 0; transform: translateY(30px); } /* 确保移动其他元素 */ .list-complete-move { transition: transform .5s; } ``` 这些样式设置了新增加的节点从下方淡入的同时向上滑动到位,而即将消失的节点则相反地向下退场直至完全透明化[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__不靠谱先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值