Vue中的列表item依次进入动画

复制代码
<template>
    <div class="my-class">
        <div class="title">
            我的班级
        </div>
        <div class="all-class" v-if="!HasNoClass">
            <el-row :gutter="17">
                <transition-group appear tag="el-col" @beforeEnter="beforeEnter" v-on:enter="enter">
                    <el-col :span="6" v-for="item in classes" :key="item.id" v-bind:data-index="item">
                        <div class="class" @click="toClass(item.id,item.name)" v-add>
                            <div class="cover-box">
                                <img :src="item.cover" alt="作品封面" width="100%">
                                <p class="class-title">{{item.name}}</p>
                            </div>
                            <div class="info-box">
                                <p><span>授课老师:</span> &nbsp;{{item.teachers[0].nickname}}</p>
                                <p><span>上课进度:</span> &nbsp;{{item.finish_lesson_count}}/{{item.lesson_count}}</p>
                                <el-progress
                                    :text-inside="true"
                                    :stroke-width="5"
                                    :percentage="item.finish_lesson_count / item.lesson_count * 100"
                                    :show-text='false'></el-progress>
                            </div>
                        </div>
                    </el-col>
                </transition-group>
            </el-row>
        </div>

    </div>
</template>

<script>
    let ind = 0
    import axios from "axios";
    export default {
        data() {
            return {
                ...
            }
        },
        created(){
            ind = 0
        },
        methods: {
            beforeEnter (el) {
                console.log('beforeEnter => ')
                //el.style.opacity = 0
                el.style.paddingTop = '100px'
            },
            // 知乎Vue列表动画 https://zhuanlan.zhihu.com/p/219783692
            enter (el, done) {
                console.log('enter => ',el.dataset.index)
                let delay = ind * 100
                ind +=1
                setTimeout(()=>{
                    //el.style.opacity = 1
                   // el.style.transition = 'opacity 1s '
                    el.style.animation = 'one-in 0.5s'
                    // el.style.animation = 'one-in 4s infinite'
                    //el.style['animation-iteration-count'] = 1
                    el.style.paddingTop = '0px'
                    done()
                }, delay)
            }
        },
    }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
    @keyframes one-in{
        from {
            padding-top: 100px;
        }
        to {
            padding-top: 0%;
        }
    }
</style>
<style scoped>
</style>
复制代码

 

posted @   野生野鸡码农  阅读(1405)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示