写多个物件css3循环动画案例原理

div {
background-color: #67CF22;
height: 100%;
width: 6px;
display: inline-block;

-webkit-animation: stretchdelay 1.2s infinite ease-in-out;
animation: stretchdelay 1.2s infinite ease-in-out;
}

.spinner .rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}

.spinner .rect3 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}

.spinner .rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}

.spinner .rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}

@-webkit-keyframes stretchdelay {
0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
20% { -webkit-transform: scaleY(1.0) }
}

@keyframes stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
} 20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}
-->

  在写h5页面中,我们可能经常遇到要写很多css3动画,有没有同学遇到多个物件同样的动画效果,循环保存步调一致呢,我就经常碰到,之前一直不知道其中的原理,只是简单的迁移改改,可是遇到稍微复杂多一点的就hold不住了,只能硬着头皮去分析其中的原理。那么接下来,让我们先看看案例,然后了解之中的原理

css3动画循环案例

案例一:loading动画效果

html代码:

<div class="spinner">
  <div class="rect1"></div>
  <div class="rect2"></div>
  <div class="rect3"></div>
  <div class="rect4"></div>
  <div class="rect5"></div>
</div>

css样式:

<style>
    .spinner {
  margin: 100px;
  width: 50px;
  height: 60px;
  text-align: center;
  font-size: 10px;
}

.spinner > div {
  background-color: #67CF22;
  height: 100%;
  width: 6px;
  display: inline-block;

  -webkit-animation: stretchdelay 1.2s infinite ease-in-out;
  animation: stretchdelay 1.2s infinite ease-in-out;
}

.spinner .rect2 {
  -webkit-animation-delay: -1.1s;
  animation-delay: -1.1s;
}

.spinner .rect3 {
  -webkit-animation-delay: -1.0s;
  animation-delay: -1.0s;
}

.spinner .rect4 {
  -webkit-animation-delay: -0.9s;
  animation-delay: -0.9s;
}

.spinner .rect5 {
  -webkit-animation-delay: -0.8s;
  animation-delay: -0.8s;
}

@-webkit-keyframes stretchdelay {
  0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
  20% { -webkit-transform: scaleY(1.0) }
}

@keyframes stretchdelay {
  0%, 40%, 100% {
    transform: scaleY(0.4);
    -webkit-transform: scaleY(0.4);
  }  20% {
    transform: scaleY(1.0);
    -webkit-transform: scaleY(1.0);
  }
}
</style>

案例二:圆形放大或缩小的loading效果

html代码:

<div class="spinner">
  <div class="double-bounce1"></div>
  <div class="double-bounce2"></div>
</div>

css样式:

.spinner {
  width: 60px;
  height: 60px;

  position: relative;
  margin: 100px;
}

.double-bounce1, .double-bounce2 {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background-color: #67CF22;
  opacity: 0.6;
  position: absolute;
  top: 0;
  left: 0;

  -webkit-animation: bounce 2.0s infinite ease-in-out;
  animation: bounce 2.0s infinite ease-in-out;
}

.double-bounce2 {
  -webkit-animation-delay: -1.0s;
  animation-delay: -1.0s;
}

@-webkit-keyframes bounce {
  0%, 100% { -webkit-transform: scale(0.0) }
  50% { -webkit-transform: scale(1.0) }
}

@keyframes bounce {
  0%, 100% {
    transform: scale(0.0);
    -webkit-transform: scale(0.0);
  } 50% {
    transform: scale(1.0);
    -webkit-transform: scale(1.0);
  }
}

  

  看了上面的两个案例,我们知道了什么是多个物件循环动画,也可以知道,通过animation-delay延迟,我们可以让多个物体保持步调一致的运动效果,但是看了动画和延迟却还是不知道怎么设置,可能你会想象物体运行的帧,确实我分析的时候也是这么想的。

css3动画循环原理

  要讲清楚这个,我们得先知道几个概率(参数),animation动画持续时间t1,每个物体延迟时间差t2,物体个数n

  t2 = t1/n

  平均关键帧的百分比为 100%/n

  把以上的这几个点,理解清楚了之后,其实我们应该就清楚了怎么去写多个物体循环了,举个例子:

html代码:

      <ul>
          <li class="on1"></li>
          <li class="on2"></li>
          <li class="on3"></li>
          <li class="on4"></li>
          <li class="on5"></li>
          <li class="on6"></li>
      </ul>

css代码:

        ul{list-style:none;padding:0;margin:0;}
        ul>li{
            width:50px;
            height:50px;
            margin-bottom:20px;
            background:orange;
            -webkit-animation:scale 3s linear infinite;
        }
        .on2{
            -webkit-animation-delay:0.5s;
        }
        .on3{
            -webkit-animation-delay:1s;
        }
        .on4{
            -webkit-animation-delay:1.5s;
        }
        .on5{
            -webkit-animation-delay:2s;
        }
        .on6{
            -webkit-animation-delay:2.5s;
        }
        @-webkit-keyframes scale{
            0%,33.4%{width:50px;height:50px;}
            16.7%{width:80px;height:80px;}
        }

  这个例子其实是6个物体循环的动画,我们控制在每次100%/16的点做不同物体变化效果就行了,即16.7%、33.4%、50.1%、66.8%、83.5、100.2%(这里由于不整除,多出了一部分,就当近似于)

  而且,我们想一开始就看到元素开始动,那么我们就要将这16.7%前置,则得出了

      @-webkit-keyframes scale{
            0%,33.4%{width:50px;height:50px;}
            16.7%{width:80px;height:80px;}
        }

  最后可能也不是讲的很清楚,还请不理解的多做几个例子,多想想就通了,共勉。

  留几个有关css3动画写的比较好的文章:

    经验分享:多屏复杂动画CSS技巧三则

    涨姿势!CSS3动画帧数科学计算法

    【原】移动web动画设计的一点心得——css3实现跑步

  

 
时间: 2024-10-13 23:25:09

写多个物件css3循环动画案例原理的相关文章

10个强大的纯CSS3动画案例分享

我们的网页外观主要由CSS控制,编写CSS代码可以任意改变我们的网页布局以及网页内容的样式.CSS3的出现,更是可以让网页增添了不少动画元素,让我们的网页变得更加生动有趣,并且更易于交互.本文分享了10个非常炫酷的CSS3动画案例,希望大家喜欢.  http://c.tieba.baidu.com/p/3473192107 1.纯CSS3实现烧烤动画 http://c.tieba.baidu.com/p/3473192107 这个CSS3动画相当有创意,动画中所有的烧烤元素都是利用CSS3绘制而

CSS3圆圈动画放大缩小循环动画效果

代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>CSS3圆圈动画放大缩小循环动画效果</title> <style> .dot { margin:150px auto; width:200px; height

Css3帧动画深入探寻,讲点项目中实际会碰到的问题

先加个副标题XD --如何解决background-size为100%下处理@keyframes 正是在项目中遇到副标题,才引起我更深入的探寻 先略带一下基本的css3动画 css3的动画实现是通过属性animation 与 @keyframes配合实现的 具体可以参见这篇文章,这位女程序媛有着非常详尽与精彩的阐述 https://24ways.org/2012/flashless-animation/ 最后实现了一张猫跑动在有视频滚动的画面上 为什么不用gif? gif动画就是典型的帧动画,g

Css3系列-动画基础

css3为我们提供了强大的动画功能,我们可以借助改变其他css属性:css3除了借助最常用css属性,要想实现更加漂亮的动画,结合css3的变换属性必可不少. 介绍css3的动画之前: transform 变换等 transition 过渡等 setTimeout 一次延时函数等 我们先做学习了解!!! 一.css3动画-热身了解 第一大部分的介绍都是api的展示和解释,我们下面的学习中,就是在用这部分api做处理: 1.transform 变换 2D处理transform  CSS3 无 检索

CSS3中和动画有关的属性transform、transition 和 animation

CSS3中和动画有关的属性有三个  transform. transition 和 animation.下面来一一说明:        transform   从字面来看transform的释义为改变,使…变形:转换 .这里我们就可以理解为变形.那都能怎么变呢? none 表示不进行变换: rotate 旋转            transform:rotate(20deg) 旋转角度可以为负数.需要先有transform-origin定义旋转的基点可为left top center righ

CSS3(4)---动画(animation)

CSS3(4)---动画(animation) 之前有写过过渡:CSS3(2)--- 过渡(transition) 个人理解两者不同点在于 过渡 只能指定属性的 开始值 与 结束值,然后在这两个属性值之间进行平滑过渡来实现动画效果,因此只能实现简单的动画效果. 动画 除了定义 开始值 和 结束值,在这之间还可以定义多个关键帧以及定义每个关键帧中元素的属性值来实现复杂的动画效果. 一.动画语法 1.属性语法 语法格式 animation:动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向

CSS3与动画有关的属性transition、animation、transform对比

最近应公司需求,需要用css3做动画,终于把以前一直傻傻分不清楚的三个属性理解了. 索性在这里进行一个简单的对比,加深自己的记忆. 浏览器兼容性 CSS3 transform 属性 Internet Explorer 10.Firefox.Opera 支持 transform 属性. Internet Explorer 9 支持替代的 -ms-transform 属性(仅适用于 2D 转换). Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D

CSS3简单动画

css3的动画确实非常绚丽!浏览器兼容性很重要!. 分享两个小动画 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=&qu

css3 animation动画技巧

一,css3 animation动画前言 随着现在浏览器对css3的兼容性越来越好,使用css3动画来制作动画的例子也越来越广泛,也随着而来带来了许多的问题值得我们能思考.css3动画如何让物体运动更顺畅,css3动画如何做弧线动画,css3动画是否有动画库,css3帧动画如何快速简单……   为了解决这些折磨人的问题,我们今天来分析一下: 首先介绍css3 Animation动画库: http://daneden.github.io/animate.css/ 基本涵盖了我们常见的基础css3动