实现 CSS 动画有多种方法,下面列出了几种常见的方式:

11,642次阅读
没有评论

共计 2689 个字符,预计需要花费 7 分钟才能阅读完成。

  1. 使用 @keyframes 规则
    • 使用 @keyframes 规则定义动画的关键帧,然后将其应用于元素的 animation 属性上。例如:
      @keyframes example {0%   { opacity: 0;}
        50%  {opacity: 1;}
        100% {opacity: 0;}
      }
      
      .animated-element {animation: example 2s ease-in-out infinite;}

      这个例子定义了一个淡入淡出的动画,并使其无限循环播放。

@keyframes属性:
  1. @keyframes 规则的名称:定义了动画的名称,格式为 @keyframes name,其中 name 是动画的名称。

  2. 关键帧声明:在 @keyframes 规则内部,通过指定百分比或关键字(如 fromto)来描述动画的不同阶段。

    • 0% 或 from:定义动画开始时的样式。
    • 100% 或 to:定义动画结束时的样式。
    • n%:定义动画在执行过程中的某个中间阶段的样式,其中 n 是一个介于 0 和 100 之间的数字。
  3. CSS 属性和值:在每个关键帧中,可以指定任意数量的 CSS 属性及其值,以定义动画中每个阶段元素的样式变化。

例如,一个简单的 @keyframes 规则可以如下所示:

@keyframes example {
  0% {transform: scale(1);
  }
  50% {transform: scale(1.5);
    opacity: 0.8;
  }
  100% {transform: scale(1);
  }
}
transition 过渡

transition 允许你在元素状态改变时平滑过渡到新的样式。你可以定义过渡的属性、持续时间、以及过渡的速度曲线。例如:

.transition-element {transition: width 0.5s ease-in-out;}

.transition-element:hover {width: 200px;}

1.transition-property:指定要过渡的 CSS 属性的名称。可以是单个属性名,多个属性名,或者是关键字 all,表示所有属性都会过渡。例如:

transition-property: width;
transition-property: background-color;
transition-property: width, height, background-color;
transition-property: all;

2.transition-duration:指定过渡效果持续的时间,以秒(s)或毫秒(ms)为单位。例如:

transition-duration: 0.3s;

3.transition-timing-function:指定过渡效果的时间函数,即动画速度的变化曲线。常见的值有 linear(线性)、ease(缓入缓出,默认值)、ease-in(加速)、ease-out(减速)、ease-in-out(先加速后减速)等。例如:

transition-timing-function: ease-in-out;

4.transition-delay:可选,指定过渡效果开始前延迟的时间。用于延迟过渡的触发。例如:

transition-delay: 0.2s;

这些属性可以单独使用,也可以一起组合使用,形成完整的过渡效果定义。例如:

/* 将宽度和背景颜色的变化进行过渡,持续时间为 0.5 秒,速度曲线为 ease-in-out,延迟 0.1 秒 */
transition: width 0.5s ease-in-out 0.1s, background-color 0.5s ease-in-out 0.1s;
animation 属性

animation 属性结合 @keyframes 规则可以实现更复杂的动画效果。你可以定义动画的名称、持续时间、速度曲线、延迟和播放次数等。

  1. animation-name: 指定要应用的关键帧动画的名称。可以是已经在 @keyframes 规则中定义过的名称。

  2. animation-duration: 指定动画完成一个周期所花费的时间,以秒(s)或毫秒(ms)为单位。

  3. animation-timing-function: 指定动画的时间进度曲线,即控制动画在其持续时间内如何变化。常见的值有 ease(默认值,慢 - 快 - 慢)、linear(匀速)、ease-in(慢开始)、ease-out(慢结束)、ease-in-out(慢开始和结束)等。

  4. animation-delay: 指定动画开始之前的延迟时间,以秒(s)或毫秒(ms)为单位。

  5. animation-iteration-count: 指定动画循环的次数,默认值为 1,可以设置为具体的次数或 infinite 表示无限循环。

  6. animation-direction: 指定动画播放的方向,可选值有 normal(默认,正常播放)、reverse(反向播放)、alternate(交替播放,正向反向交替)、alternate-reverse(反向交替播放)。

  7. animation-fill-mode: 指定动画执行之前和之后如何应用样式。常见的值包括 none(默认,不改变样式)、forwards(动画结束后应用最后一帧的样式)、backwards(动画播放前应用第一帧的样式)、both(向前和向后都应用样式)。

  8. animation-play-state: 指定动画的播放状态,可以是 running(运行)或 paused(暂停)。用来控制动画的启停状态。

例如 :

.animated-element {
  animation-name: slidein;
  animation-duration: 3s;
  animation-timing-function: ease;
  animation-delay: 1s;
  animation-iteration-count: infinite;
}

@keyframes slidein {
  from {transform: translateX(-100%);
  }
  to {transform: translateX(0);
  }
}
JavaScript 操作 classList
const element = document.querySelector('.animated-element');
element.classList.add('slide-in');

 在这种方法中,可以在 CSS 中定义 .slide-in 类的样式,例如使用 @keyframestransition

这些方法各有特点,选择哪种取决于你想要实现的动画效果的复杂性和需求。

原文地址: 实现 CSS 动画有多种方法,下面列出了几种常见的方式:

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-07发表,共计2689字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)