• 当前子专栏 基础入门三大核心篇 是免费开放阶段推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V!
  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费开放购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区。
  • 福利:除了通过订阅"白宝书系列专栏"加入社区获取所有付费专栏的内容之外,还可以通过加入星荐官共赢计划 加入私域社区。
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,目前任某金融品类App负责人。
  • 荣誉:2022年度博客之星Top4博客专家认证、全栈领域优质创作者、新星计划导师“星荐官共赢计划” 发起人
  • 现象级专栏《白宝书系列》作者文章知识点浅显易懂且不失深度TFS-CLUB社区创立者旨在以“赋能 共赢”推动共建技术人成长共同体
  • 🏆 白宝书系列
    • 🏅 Python全栈白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书
〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

文章目录

  • ⭐️ 动画
    • 🌟 动画的定义
    • 🌟 动画的调用
    • 🌟 多关键帧动画
    • 🌟 动画效果实战

我们学习了 “过渡” 之后,结合 “变形” ,已经可以实现动画了,但编写起来比较复杂,而且一定手动来触发这个动画(比如鼠标浮上去),如果说,我们打开网页就可以看到一些动画,该怎么实现呢?这就用到了css3新增的另一个强大的功能—— “动画” 。

⭐️ 动画

在css3中可以直接定义动画,这些动画不需要通过鼠标触碰等来触发

🌟 动画的定义

  • 定义动画:使用@keyframes来定义动画,keyframes表示“关键帧”,在项目上线前,要补上例如@-webkit-这样的浏览器私有前缀。
  • 什么叫关键帧?

    • 在制作动画的时候,只需要制作“”起始“和”结束“两种状态,这两种状态就叫做动画的 “关键帧”。中间的帧由css3自动补全。
〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

我们看到这里面没有包含动画的时间、速度等内容,这些内容要在动画调用里去实现。

🌟 动画的调用

调用动画:使用 animation 属性调用动画,animation就是动画的意思。

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

上面四个参数和过渡非常的像,大家可以对比记忆。动画还有第五个参数:动画的执行次数。

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

动画的执行次数有几种写法:

  • 如果想永远执行可以写:animation: r 2s linear 0s infinite;

  • 我们还可以让动画第2、4、6…(偶数次)自动逆向执行,那么需要加上alternate参数即可:animation: r 2s linear 0s infinite alternate;

  • 如果想让动画停止在最后结束状态,那么要加上forwards:animation: r 2s linear 0s forwards;

只看这些很难理解,下面我们来举例说明:

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

动画效果如下:

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

🌟 多关键帧动画

在之前的例子中,我们都是只定义了两个关键帧:开始状态和结束状态。事实上,我们还可以定义多个关键帧,例如:

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

百分数代表时间节点,例如20%代表动画总时长的前20%

下面看个例子:

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

🌟 动画效果实战

案例一

发光的灯泡

第一步,先把“灯泡”和“光”通过绝对定位,调整到一起,让光笼罩着灯泡。

可以打开开发者调试工具,通过尝试去寻找移动的值。

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

第二步,给“光”添加动画,透明度由0变1,再有1变0,无限循环

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

案例二

穿梭在宇宙中的小火箭

〖大前端 - 基础入门三大核心之CSS篇㉔〗- 动画效果与实战小案例

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 200px;
            height: 200px;
            position: relative;
            margin: 300px auto;
        }
        img {
            width: 200px;
            height: 200px;
            animation: zd .5s linear 0s infinite alternate;
        }
        @keyframes zd {
            from {
                transform: translateX(20px) translateY(20px);
            }
            to {
                transform: translateX(-20px) translateY(-20px);
            }
        }
        .line {
            width: 2px;
            height: 120px;
            background-color: blue;
            position: absolute;
            top: 0;
            left: 0;
            animation: yd .8s linear 0s infinite;
        }
        .line2 {
            height: 80px;
            left: 30px;
            animation: yd .8s linear .4s infinite;
        }
        .line3 {
            height: 100px;
            left: 100px;
            animation: yd .8s linear .5s infinite;
        }
        .line4 {
            height: 200px;
            left: 180px;
            animation: yd .8s linear .6s infinite;
        }
        @keyframes yd {
            0% {
                transform: rotate(45deg) translateY(-200px);
                opacity: 0;
            }
            50% {
                opacity: 1;
            }
            to {
                transform: rotate(45deg) translateY(200px);
                opacity: 0;
            }
        }
    </style>
</head>
<body>
    <div class="box">
        <img src="/imges/huojian.png" alt="">
        <div class="line line1"></div>
        <div class="line line2"></div>
        <div class="line line3"></div>
        <div class="line line4"></div>
    </div>
</body>
</html>

发表回复