本篇文章主要介绍用CSS3实现的水波扩散涟漪,圆波扩散,光圈扩散,雷达波向外散发动画。

预期效果应该是这样:,其实应该比这个更优美,因为设计师提供的gif出现透明度丢失问题,所以建议用css3实现。

一、明确参数

1、半径

30,42,54
2、透明度

100%,50%,20%
3、颜色

#fb7070

二、实现方案

1、border-width + animation

<div parent="box">
    <a id="J_dot"></a>
</div>
div[parent="box"] {
  position: relative;
  margin:50px auto;
  width:54px;
  height: 54px;
}
#J_dot{
  float: left;
  width: 54px;
  height: 54px;
  box-sizing: border-box;
  border-style:double;
  border-color: #fb7070;
  border-radius: 100%;
  animation: circleAnimation 1s infinite alternate;
}

@keyframes circleAnimation {
  from {
     border-width:;
  }
  to {
     border-width:27px;
  }
}

@-webkit-keyframes circleAnimation {
  from {
    border-width:;
  }
  to {
    border-width:27px;
  }
}

太假了,整个动画一直固定在大圆圈内,内圆圈似乎在来回放大缩小,离期望值太远!

2、box-shadow + background-color +animation

<div parent="box">
  <div class="outer-circle">
    <div class="inner-circle"></div>
  </div>
</div>
div[parent="box"] {
  position:relative;
  margin:50px auto;
  width:54px;
  height:54px;
}
.outer-circle {
  animation: circleAnimationOut 1.5s cubic-bezier(0.165, 0.84, 0.44, 1);
}
.inner-circle {
  animation: circleAnimationIn 1.5s cubic-bezier(0.165, 0.84, 0.44, 1);
}
.outer-circle, .inner-circle {
  position: absolute;
  z-index:;
  width: 30px;
  height: 30px;
  background: transparent;
  border-radius: 100%;
  animation-iteration-count: infinite;
}

@keyframes circleAnimationOut {
  0% {
    box-shadow: 0 0 0 0px rgba(251, 112, 112, 0.5);
  }
  100% {
    box-shadow: 0 0 0 24px rgba(251, 112, 112, 0.2);
  }
}
@keyframes circleAnimationIn {
  0% {
    box-shadow: 0 0 0 0px rgba(251, 112, 112, 0.5);
    background-color: rgba(251, 112, 112, 1);
  }
  100% {
    box-shadow: 0 0 0 12px rgba(251, 112, 112, 0.5);
    background-color: rgba(251, 112, 112, 1);
  }
}

中间实心圆貌似没怎么动啊,效果还凑合。

3、box-shadow + transform +animation

<div parent="box">
  <div class="dot"></div>
  <div class="inner-circle"></div>
  <div class="outer-circle"></div>
</div>
@keyframes circleAnimationIn {
  0% {
    transform: scale(0.3);
    -webkit-transform: scale(0.3);
    opacity: 0.0;
  }
  25% {
    transform: scale(0.3);
    -webkit-transform: scale(0.3);
    opacity: 0.1;
  }
  50% {
    transform: scale(0.5);
    -webkit-transform: scale(0.5);
    opacity: 0.3;
  }
  75% {
    transform: scale(0.8);
    -webkit-transform: scale(0.8);
    opacity: 0.5;
  }
  100% {
    transform: scale(1);
    -webkit-transform: scale(1);
    opacity: 0.0;
  }
}
@keyframes circleAnimationOut {
  0% {
    transform: scale(0.3);
    -webkit-transform: scale(0.3);
    opacity: 0.0;
  }
  25% {
    transform: scale(0.3);
    -webkit-transform: scale(0.3);
    opacity: 0.1;
  }
  50% {
    transform: scale(0.3);
    -webkit-transform: scale(0.3);
    opacity: 0.3;
  }
  75% {
    transform: scale(0.5);
    -webkit-transform: scale(0.5);
    opacity: 0.5;
  }
  100% {
    transform: scale(0.8);
    -webkit-transform: scale(0.8);
    opacity: 0.0;
  }
}
div[parent="box"] {
  position: relative;
  margin: 50px auto;
  width: 54px;
  height: 54px;
}

/* 保持大小不变的小圆点 */
.dot {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 20px;
  height: 20px;
  margin-left: -9px;
  margin-top: -9px;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  background-color: #fb7070; /* 实心圆 ,如果没有这个就是一个小圆圈 */
  z-index:;
}

/* 产生动画(向外扩散变大)的圆圈 第一个圆 */
.inner-circle {
  position: absolute;
  z-index:;
  width: 54px;
  height: 54px;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  border: 1px solid #fb7070;
  -webkit-animation: circleAnimationIn 2s ease-out;
  -moz-animation: circleAnimationIn 2s ease-out;
  animation: circleAnimationIn 2s ease-out;
  -webkit-animation-iteration-count: infinite;
  -moz-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
  box-shadow: 1px 1px 30px #fb7070;
}

/* 产生动画(向外扩散变大)的圆圈 第二个圆 */
.outer-circle {
  position: absolute;
  z-index:;
  width: 54px;
  height: 54px;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  border: 1px solid #fb7070;
  -webkit-animation: circleAnimationOut 2s ease-out;
  -moz-animation: circleAnimationOut 2s ease-out;
  animation: circleAnimationOut 2s ease-out;
  -webkit-animation-iteration-count: infinite;
  -moz-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
  box-shadow: 1px 1px 30px #fb7070;
}

CSS3组件化之圆波扩散的更多相关文章

  1. CSS3组件化之ios版菊花loading

    <div class="juhua-loading"> <div class="jh-circle1 jh-circle-ios">&l ...

  2. CSS3组件化之菊花loading

    <div class="juhua-loading"> <div class="jh-circle"></div> < ...

  3. CSS3组件化之单线箭头

    <div class="parent-box"> <div class="top-arrow"></div> <div ...

  4. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  5. 实现checkbox组件化(Component)

    之前我写了一篇自定义checkbox的文章,通过css3实现自定义的checkbox,并没有使用当今流行的Reactjs, 或者Vuejs之类的进行组件化.但是很显然,这样封装的checkbox组件复 ...

  6. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  7. android弹力效果菜单、组件化项目、电影票选座控件的源码

    Android精选源码 android启动扫一扫和收付款的小部件源码 android弹力效果的抽屉菜单源码 对RecyclerView Item做动画 源码 android类似QQ空间,微信朋友圈,微 ...

  8. vue(9)—— 组件化开发 - webpack(3)

    前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...

  9. Android组件化demo实现以及遇坑分享

    首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo 作者:TenzLiu原文链接:https://www.jianshu ...

随机推荐

  1. 微服务深入浅出(5)-- 声明式调用Feign

    Feign的使用 Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单. 配置文件: spring: application: name: eure ...

  2. JS设计模式——12.装饰者模式

    装饰者模式概述 本章讨论的是一种为对象添加特性的技术,她并不使用创建新子类这种手段. 装饰者模式可以用来透明的把对象包装在具有同样接口的另一个对象中.这样一来,就可以给一个方法添加一些行为,然后将方法 ...

  3. 【bzoj题解】1012 最大数

    题目描述 现在请求你维护一个数列,要求提供以下两种操作:1.查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2.插入操作.语法:A ...

  4. XSS练习小游戏和答案参考

    源码:https://files.cnblogs.com/files/Eleven-Liu/xss%E7%BB%83%E4%B9%A0%E5%B0%8F%E6%B8%B8%E6%88%8F.zip 感 ...

  5. day11作业

    一.选择题 1.B 2.D 3.AB 4.C 二.判断题 1.× 2.√ 三.简答题 1. 多态就是事物存在的多种形态. 提高程序的复用性,提高程序的可扩展性和可维护性. 2. 向上转型是指父类引用指 ...

  6. Laravel 程序架构设计思路:使用动作类

    当我们谈论到应用程序的架构的时候,经常会问到一个经典的问题,那就是"这段代码应该放在哪里比较好". 因为 Laravel 是一个相当灵活的框架,所以要回答这个问题其实没那么容易.我 ...

  7. Java OOM学习

    转载自原文: 什么是java OOM?如何分析及解决oom问题? 什么是OOM? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",表现 ...

  8. SVN入门教程总结

    参考: SVN使用笔记 SVN入门必备教程 一看就懂 SVN使用教程总结 版本控制器:SVN教程 菜鸟教程之SVN教程 极客学院之SVN教程 SVN(SubVersion)简介: 为什么要使用SVN( ...

  9. PHP array_diff 计算数组的差集

    array_diff (PHP 4 >= 4.0.1, PHP 5) array_diff — 计算数组的差集 说明 array array_diff ( array $array1 , arr ...

  10. servlet 学习笔记(二)

    ---------------------第二讲--------------------------------- 开发servlet有三种方法: 1.实现servlet接口(最原始的) 实现接口的5 ...