每天进步一点点2021.11.2 css动画的steps运动帧

steps(n, state)简介

steps是animation动画的属性animation-timing-function的一个值。 也就是用来控制动画运动方式的。

steps(n, state) 有两个值。

n 表示将单次运动分为几步来完成。而且从每一步都是直接从开始状态跳转到结束状态,而不是连续性的运动。

state表示单次运动的状态。

参数介绍

这么说,会有点模糊,举个例子说说。

现在有一个盒子<div></div>

给他设置一个样式和动画

@keyframes move {
      0% {margin-left: 0px;}
      100% {margin-left: 200px;}
    }
    div {
      width: 30px;
      height: 30px;
      background-color: pink;
      margin-left: 0;
      animation: move 5s steps(10, end) forwards;
    }

move动画总共就一步,即从0px运动到200px。结束

step中的第一个参数n,就表示把这一步 拆分成几段来完成。

如例子所示,steps(10, end) 就表示把总共运动的200px拆分成10段,分10次运动,每次运动是20px

相当于把

0% {margin-left: 0px;}
100% {margin-left: 200px;}

变成了

0% {margin-left: 0px;}
10% {margin-left: 20px;}
20% {margin-left: 40px;}
...
90% {margin-left: 180px;}
100% {margin-left: 200px;}

再说说参数state

state就是动画开始前,动画是在第一段结束的开始位置还是结束位置

state的值是start,就表示动画开始前,动画就从第一段的结束位置开始。

也就是说, 动画是从10% {margin-left: 20px;}的位置开始的。(可以简单这样理解)

state的值是end,就表示动画开始把第一段结束的位置当作自己这一步的结束位置。

也就是动画从0% {margin-left: 0px;}开始,第一步是到10% {margin-left: 20px;}结束。

看个例子,发现不同

不用steps时的运动形式:

<!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>
    @keyframes move {
      0% {margin-left: 0px;}
      100% {margin-left: 200px;}
    }
    div {
      width: 30px;
      height: 30px;
      background-color: pink;
      margin-left: 0;
      animation: move 5s forwards;
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

用steps的运动形式:

<!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>
    @keyframes move {
      0% {margin-left: 0px;}
      100% {margin-left: 200px;}
    }
    div {
      width: 30px;
      height: 30px;
      background-color: pink;
      margin-left: 0;
      animation: move 5s steps(10, end) forwards;
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

参考文档
  • https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-timing-function
  • https://segmentfault.com/a/1190000007042048
  • https://www.cnblogs.com/yangpeixian/p/11227683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值