css基本动画的实践 animation transition

文章介绍了如何在Vue项目中,通过使用`ref`和动态渲染,结合CSS关键帧动画,实现在页面上展示一组图片和文字的延时、循环动画效果。
摘要由CSDN通过智能技术生成

<template>
    <!-- ref获取盒子内元素 -->
    <div class="animate" ref="animate">
        <!-- 循环渲染盒子内容 -->
        <div class="animate-item" v-for="(item, index) in arr" :key="index">
            <img :src="item.img" alt="">
            <p>{{ item.text }}</p>
        </div>
    </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue'
const animate = ref()
//获取ref盒子元素
onMounted(() => {
    console.log(animate, '看看这个')
    //当我们定义的i小于盒子内数组的个数时执行循环 
    for (let i = 0; i < animate.value!.children.length; i++) {
        //提前时间算法算出每一个动画的提前量
        (animate.value!.children[i]).style.animationDelay = `
            ${-7.5 - 5 * i}s,
            ${-5 * i}s,
            ${-5 * i}s
        `
    }
})
// 数组数据
const arr = ref([
    {
        img: '/src/assets/交通安全画像系统_nor.png',
        text: '交通安全画像系统',
        img_hov: '/src/assets/交通安全画像系统_hov.png',
    },
    {
        img: '/src/assets/交通态势监控系统_nor.png',
        text: '交通态势监控系统',
        img_hov: '/src/assets/交通态势监控系统_hov.png',
    },
    {
        img: '/src/assets/可视化作战平台_nor.png',
        text: '可视化作战平台',
        img_hov: '/src/assets/可视化作战平台_hov.png',
    },
    {
        img: '/src/assets/重点车辆监管系统_nor.png',
        text: '重点车辆监管系统',
        img_hov: '/src/assets/重点车辆监管系统_hov.png',
    },
    {
        img: '/src/assets/支队平台系统本地化应用_nor.png',
        text: '支队平台系统本地化应用',
        img_hov: '/src/assets/支队平台系统本地化应用_hov.png',
    },
    {
        img: '/src/assets/非机动车未带头盔识别系统_nor.png',
        text: '非机动车未带头盔识别系统',
        img_hov: '/src/assets/非机动车未带头盔识别系统_hov.png',
    }
])
</script>
<style scoped lang="scss">
//定义横向移动的动画name
@keyframes animateX {
    0% {
        left: 0;
    }

    100% {
        left: calc(100% - 200px);
    }
}

//定义竖向移动的动画name
@keyframes animateY {
    0% {
        top: 0;
    }

    100% {
        top: calc(100% - 200px);
    }
}

//定义缩放内容 name
@keyframes scale {
    0% {
        transform: scale(0.5);
    }

    50% {
        transform: scale(1);
    }

    100% {
        transform: scale(0.5);
    }
}

.animate {
    position: absolute;
    top: 100px;
    left: 0;
    width: 100%;
    height: 50%;
    background-color: black;

    .animate-item {
        width: 200px;
        height: 200px;
        position: absolute;
        top: 0;
        left: 0;
        text-align: center;
        animation-name: animateX, animateY, scale;
        //动画名称
        animation-duration: 15s, 15s, 30s;
        //动画执行时间
        animation-timing-function: cubic-bezier(.36, 0, .64, 1);
        //贝塞尔曲线时间
        animation-iteration-count: infinite;
        //count次数无限执行
        animation-direction: alternate;
        //循环播放动画内容

        p {
            color: white;
            padding: 0;
            margin: 0;
        }
    }
}
</style>

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值