CSS动画Animation全解

前言

在css中我们希望实现一个动画的效果,我们可以使用animation属性进行元素的操作,从而实现动画效果

本文就使用一个小demo来讲解一下

效果展示

代码实现

可以看到现在我们实现的是一只皮卡丘在移动

首先我们需要拿到这张gif图片i.gifer.com/4tym.gif

接下来我们就将它放在我们的页面中

html

html 复制代码
<div class="login">
    <div class="login-wrappe">
      <div class="avatar">
        <img src="https://i.gifer.com/4tym.gif" alt="" />
      </div>
    </div> 
 </div>

css

js 复制代码
.login {
  width: 100vw;
  height: 100vh;
  background-color: #fff;
  padding: 0 0.3rem;
  box-sizing: border-box;
  overflow: hidden; // 溢出隐藏.让其变为bfc容器

  .login-wrappe {
    width: 7.44rem;
    height: 12.77rem;
    border: 1px solid #ccc;
    margin: 0 auto;
    margin-top: 1rem;
    border-radius: 0.3rem;
    box-shadow: -0.25rem 0.25rem 0.6rem rgb(115, 115, 115);
    overflow: hidden;
    .avatar {
      width: 2.4rem;
      height: 2.4rem;
      margin: 1rem auto 0.77rem;
      overflow: hidden;
      img {
        width: 100%;
      }
    }
  }
}

目前的效果为:

可以看到这个动图是在原地动,我们只需要给他添加动画就能够实现让他看起来好像真的在跑

接下来我们定义一个动画的关键帧

css 复制代码
@keyframes move {
  0% {
    transform: translateX(-180px);
  }
  100% {
    transform: translateX(180px); /* 要移动的距离 */
  }
}

0% 这个关键帧时,元素的 transform 属性被设置为 translateX(-180px) ,这表示动画开始时,元素会向左平移 180 像素。

100% 这个关键帧时,transform 属性被设置为 translateX(180px) ,这意味着动画结束时,元素会向右平移 180 像素。

然后再对应的容器里添加一个animation

js 复制代码
 /* 动画名称,持续时间,速度曲线,迭代次数 */
 animation: move 2s ease-in-out infinite;

常见的动画速度曲线(缓动函数)包括:

  • linear :动画以恒定速度进行,没有加速或减速。
  • ease :动画开始时缓慢,然后加速,结束时再次缓慢。
  • ease-in :动画开始时缓慢,然后以正常速度进行。
  • ease-out :动画以正常速度开始,结束时缓慢。
  • ease-in-out :动画开始和结束时缓慢,中间速度正常。

动画的迭代次数可以是以下几种情况:

  • infinite :无限次循环播放。
  • 具体的整数,例如 25 等,表示动画播放的具体次数。

接下来我们就能看到这个效果了

animation需要配合@keyframes来使用,通过他们的结合使用是可以实现很复杂的动画效果的

animation的一般步骤如下:

  1. 定义关键帧动画
    使用 @keyframes 规则定义动画的关键帧。每个关键帧都指定了元素在某一时刻的样式。
css 复制代码
@keyframes slide {
  0% { transform: translateX(0); }
  50% { transform: translateX(100px); }
  100% { transform: translateX(0); }
}
  1. 将动画应用到元素
    使用 animation 属性将定义好的动画应用到元素上。可以设置动画名称、持续时间、速度曲线等参数。
css 复制代码
.animated-element {
  animation: slide 3s ease-in-out infinite;
}
  1. 调整动画参数
    可以进一步调整动画的各种属性,如:
  • animation-name: 动画名称
  • animation-duration: 动画持续时间
  • animation-timing-function: 速度曲线
  • animation-delay: 动画延迟启动时间
  • animation-iteration-count: 动画循环次数
  • animation-direction: 动画播放方向
  1. 结合其他 CSS 属性
    动画可以与其他 CSS 属性结合使用,如 transformopacity 等,创造出更复杂的视觉效果。
css 复制代码
@keyframes grow {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.5); opacity: 0.5; }
  100% { transform: scale(1); opacity: 1; }
}

.animated-element {
  animation: grow 2s ease-in-out infinite;
}
  1. 性能优化
    为了保证动画的流畅性,应该尽量避免触发昂贵的重排和重绘操作,优先使用 transformopacity 属性来驱动动画。

总结

本文介绍了CSS动画Animation的基础的使用用法,结合代码带大家实现了一个移动的皮卡丘

希望本文能够帮助你对Animation有更好的理解!!

相关推荐
JieE21213 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
runnerdancer14 小时前
LLM是怎么处理messages数组的,提示词缓存又是什么
前端·agent
陈随易15 小时前
VSCode的Copilot扩展支持接入DeepSeek,Kimi了!
前端·后端·程序员
我不是外星人16 小时前
有了 Harness Engineering ,真的还需要研发工程师吗?
前端·后端·ai编程
candyTong16 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
IT_陈寒19 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
Jackson__20 小时前
分享一个横向滚动案例,带悬停暂停,通用性很强
前端
MariaH20 小时前
git rebase的使用
前端
_柳青杨20 小时前
深入理解 JavaScript 事件循环
前端·javascript
阡陌Jony20 小时前
关于前端性能优化的一些问题:
前端