CSS3+JavaScript实现炫酷呼吸效果的示例代码


Posted in HTML / CSS onJune 15, 2020

用css3动画实现的一个简单炫酷效果,最终的效果图如下:

CSS3+JavaScript实现炫酷呼吸效果的示例代码

页面结构(index.html):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>Relax And Breath</h1>
  <div class="container">
    <div class="circle"></div>
    <p id="text"></p>
    <div class="pointer-container">
      <div class="pointer"></div>
    </div>
    <div class="gradient-circle"></div>
  </div>
  <script src="script.js"></script>
</body>
</html>

script.js:

const container = document.querySelector('.container');
const text = document.querySelector('#text');

const totalTime = 7500;
const breathTime = (totalTime/5)*2; //呼吸的时间为3s
const holdTime = totalTime/5;    //保持呼吸的时间为1.5s
console.log(breathTime);

breathAnimation();    //一开始自执行breathAnimation函数
function breathAnimation(){
  text.innerHTML = 'Breath In';
  container.className = 'container grow';    //给container添加grow类,实现放大效果

  setTimeout(function(){
    text.innerHTML = 'Hold On';
    setTimeout(function(){
      text.innerHTML = 'Breath Out';
      container.className = 'container shrink';//给container添加shrink类,实现缩小效果
    },holdTime)
  },breathTime)
}

setInterval(breathAnimation,totalTime);    //重复执行

样式(style.css):

*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body{
  background: url('./img/bg.jpg') no-repeat center center /cover;
  min-height: 100vh;
  font-family: Arial, Helvetica, sans-serif;
  color: #fff;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
/*注意设置margin为auto*/
.container{
  position: relative;
  width: 300px;
  height: 300px;
  display: flex;
  align-items: center;
  justify-content: center;
  transform: scale(1);
  margin: auto;
}

/*使用圆锥渐变作为背景,宽高比.container稍大,同时z-index要设为-2,因为还有一层为.circle,最外层是文字*/
.gradient-circle{
  position: absolute;
  left: -10px;
  top: -10px;
  background: conic-gradient(
    #55b7a4 0%,
    #4ca493 40%,
    #fff 40%,
    #fff 60%,
    #336d62 60%,
    #2a5b52 100%
  );
  width: 320px;
  height: 320px;
  border-radius: 50%;
  z-index: -2;
}

/z-index为-1,为中间黑色的圆/
.circle{
  position: absolute;
  left: 0;
  top: 0;
  width: 300px;
  height: 300px;
  background-color: #010f1c;
  border-radius: 50%;
  z-index: -1;
}

/*.pointer-container是小球外面的容器,其高设置为190,是因为其中150为半径,还有40为top-40,这样就会绕着圆心转,且不会换到里面来,注意transform-origin为中下方*/
.pointer-container{
  position: absolute;
  width: 20px;
  height: 190px;
  top: -40px;
  left: 140px;
  /* background-color: red; */
  transform-origin: bottom center;
  animation: rotate 7.5s linear forwards infinite;
}

/*小球*/
.pointer{
  width: 20px;
  height: 20px;
  background-color: #fff;
  border-radius: 50%;
}

/*设置小球转圈的效果*/
@keyframes rotate{
  from{
    transform: rotate(0deg);
  }to{
    transform: rotate(360deg);
  }
}
.container.grow{
  animation: grow 3s linear forwards;
}
.container.shrink{
  animation: shrink 2s linear forwards;
}
@keyframes grow{
  from{
    transform: scale(1)
  }to{
    transform: scale(1.2);
  }
}

@keyframes shrink{
  from{
    transform: scale(1.2)
  }to{
    transform: scale(1);
  }
}

如果.container的margin不设置为auto或者一个具体的值,就会造成下图的效果,文字和圆挤在一块:

CSS3+JavaScript实现炫酷呼吸效果的示例代码

同时我把.pointer-container里面的 background-color: red; 添上就会更加理解为什么要把.pointer-container的高度设置为190px.另外如果不把transform-origin设置为bottom center它就会如图中标注的默认点旋转,这并不是我们想要的效果.

CSS3+JavaScript实现炫酷呼吸效果的示例代码

还有个细节就是.shrink的动画时间我设置成了两秒,其实按照js里面的breath out这段时间应该为3s,但是为了从breath out到breath in有个缓冲的效果,就设置成了2s,不然breath out到breath in没有一个过渡,会显得突兀不好看.

到此这篇关于CSS3+JavaScript实现炫酷呼吸效果的示例代码的文章就介绍到这了,更多相关CSS3+JavaScript呼吸效果内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
45个非常奇妙的CSS3 特性应用示例
Jan 01 HTML / CSS
CSS3弹性盒模型开发笔记(二)
Apr 26 HTML / CSS
CSS3让登陆面板3D旋转起来
May 03 HTML / CSS
html标签之Object和EMBED标签详解
Jul 04 HTML / CSS
HTML5 新标签全部总汇(推荐)
Jun 13 HTML / CSS
使用phonegap创建联系人的实现方法
Mar 30 HTML / CSS
HTML5页面中尝试调起APP功能
Sep 12 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
Nov 19 HTML / CSS
HTML5中外部浏览器唤起微信分享
Jan 02 HTML / CSS
总结html5自定义属性有哪些
Apr 01 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
Jan 05 HTML / CSS
详解Html5项目适配系统深色模式方案总结
Apr 14 HTML / CSS
CSS3中引入多种自定义字体font-face
Jun 12 #HTML / CSS
详解CSS3实现响应式手风琴效果
Jun 10 #HTML / CSS
CSS3实现淘宝留白的方法
Jun 05 #HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
Jun 02 #HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 #HTML / CSS
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
Jun 01 #HTML / CSS
css3实现背景模糊的三种方式(小结)
May 15 #HTML / CSS
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
jquery插件懒加载的示例
2020/10/24 jQuery
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python中给List添加元素的4种方法分享
2014/11/28 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
一套Java笔试题
2016/08/20 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
草船借箭教学反思
2014/02/03 职场文书
医学类个人求职信范文
2014/02/05 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技