一个纯CSS实现的球体动画效果:

经过研究上面的效果实现起来大致可以分为五个步骤,下面就来一一介绍。

1.使用Jade和SCSS生成一个圆圈

创建一个圆圈的第一步是生成所有组成圆圈的粒子。有了Jade,我们不用一个一个的写出200个div。

以下的代码创建了一个容器.mommy和200个div:

.mommy

- for (var x = 0; x < 200; x++)

div

添加一点CSS确认一下200个div已经生成:

.mommy{

border:1px solid black;

}

div{

width: 4px;

height: 4px;

background:red;

}

正如下面你所看到的,我们生成了一个800px高的红色方块,它是由200个div组成的。

接下来,我们要将这200个div分别定位在不同的位置组成一个圆圈,并通过SCSS来实现。

在上面的CSS中还需要再添加一些设置,给所有的div设置绝对定位,并将它们向左和向上移动2px的距离,这样div的中心点与容器的0,0坐标点就重合了。然后,我们设置容器为固定的宽高大小。

.mommy{

border:1px solid black;

width: 400px;

height: 400px;

position: relative;

}

div{

width: 4px;

height: 4px;

background:red;

position: absolute;

top: -2px;

left: -2px;

}

通过SCSS,我们可以在for循环中为每一个div设置不同的位置,这样就不必手动的一个一个去设置。首先创建一个变量,它的值等于div的个数,这样在后面如果要用到div的数量值时,直接引用这个变量就可以了。如果有一天需要改变成400个div,只需要在CSS中改变变量的值就可以了。

$amount : 200;

@for $i from 1 through $amount {

//循环中的代码

}

现在我们就可以在循环中改变每个div的坐标了,这需要一点点的数学计算。

以下的函数就是生成圆圈的坐标点的计算公式:

x = cos((index/amount)*(PI*2))*radius + radius;

y = sin((index/amount)*(PI*2))*radius + radius;

用SCSS来表示上面的公式就是:

$x : cos(($i/$amount)*360deg)*200px + 200;

$y : sin(($i/$amount)*360deg)*200px + 200;

然后我们将通过公式计算得出的点坐标应用在每个div上:

div:nth-child(#{$i}){

transform: translate3d($x, $y,0px);

}

这是第一步生成的结果,虽然不是很漂亮,但是,嗯,你从零开始创造了一个圆圈!

2.将圆圈变成一个球体

现在我们有了一个用SCSS生成的圆圈,但是我们需要的是一个球体。圆圈是一个二维图形,而球体是一个三维立体图形。二维几何图形只有两个轴:X轴和Y轴,而对于三维,又多了一个坐标轴:Z轴。这意味着我们还要计算每个div在Z轴上的位置坐标。幸运的是,已经有成熟的公式帮助我们来定位球体上每个元素的位置,我不会详细的介绍公式的原理(属于数学范畴),我们只需要使用就可以了:

θ : (index / amount) * 120;

δ : (index / amount) * PI;

x : radius * cos(δ) * cos(θ);

y : radius * cos(δ) * sin(θ);

z : radius * sin(δ);

现在我们有了以上的函数,它可以完全满足我们的需求,我们把它插入到循环中。

@for $i from 1 through $amount {

$theta : ($i / $amount) * 120;

$delta : ($i / $amount) * pi();

$x : 200px * cos($delta) * cos($theta) + 200; //+200 to center our sphere in our 3D world

$y : 200px * cos($delta) * sin($theta) + 200; //+200 to center our sphere in our 3D world

$z : 200px * sin($delta);

div:nth-child(#{$i}){

transform: translate3d($x, $y,$z);

}

}

下面就是生成的球体效果,正如你所看到的,所有的div都有重新有了新的位置,但是我们看到的好像仍然是平面效果,不是3D立体的。

在CSS中有一个叫perspective的属性,它允许我们为任何元素设置一个特定的透视值。在我们的例子中,我们希望在容器.mommy设置3D效果。并且还需要设置一个transform-style: preserve-3d;这样所有的div就处于立体坐标系中了。

现在我们可以看到所有div的大小都变得不一样了。div距离“屏幕”的距离越远,它就会越小,这意味着它们已经处于立体坐标系中了!

3.旋转球体

所有的div已经就绪了,接下来我们就要看到最后的结果了。我们设置一个仅有一个关键帧的动画效果:

.mommy{

[...]

animation: rotation 10s linear infinite;

}

@keyframes rotation{

to{

transform:rotateY(360deg);

}

}

你可能已经注意到,有些div不是正面屏幕而是与屏幕成90°时,它们就会消失看不到。为了防止这种情况的发生,我们需要给每个div一个反方向的旋转,让它们的正面始终面对屏幕显示。

我们要在div上应用一个反方向的旋转,但是由于已经应用了一个转换,我们将利用伪元素,它将成为红色的小方块。这样,div本身只需要提供定位作用就可以了,并且设置一个transform-style属性,让div处于3D环境中。

div{

[...]

transform-style: preserve-3d;

&:before{

content:"";

display: block;

width: 4px;

height:4px;

background:red;

animation: rotation 10s infinite linear reverse;

}

}

塔达!CSS球体的效果就这样做好了!

4.更炫的球体

在以上代码的基础上,我们发散思维,可以做出更加炫酷的球体效果:

想要学习以上所有球体动画的代码可以加入到我们的学习群。

更多大型互联网web前端实战操作,在线解析,学习指导,学习资源,点:【WEB前端资源】

前端实现炫酷动效_web前端入门到实战:使用CSS创建一个炫酷的球体动画效果相关推荐

  1. 球体动画Android,使用CSS创建一个炫酷的球体动画效果

    我最近看到了一个纯CSS实现的球体动画效果: 经过研究上面的效果实现起来大致可以分为五个步骤,下面就来一一介绍. 1.使用Jade和SCSS生成一个圆圈 创建一个圆圈的第一步是生成所有组成圆圈的粒子. ...

  2. 前端实现炫酷动效_前端动效实现--lottie - web

    前端常用动效实现方式 CSS3 帧动画 CSS 发展到了今天,它的强大几乎不是我们可以想想到的.合理的使用Animation可以实现很多神奇效果.配合设计师的导出图,前端使用序列帧即可实现动画效果. ...

  3. 前端实现炫酷动效_前端实现炫酷动效_Lottie-前端实现AE动效

    阅读时间 10~15min 项目背景 项目中为了优化用户体验加入了几处微交互动画,过期的流程都是设计输出合成的雪碧图,前端通过序列帧实现动画效果,如下图动画效果: 序列帧: 动画效果: 序列帧: 帧动 ...

  4. android recyclerview item自适应高度_web前端入门到实战:css让一个盒子的高度自适应屏幕剩余的部分...

    项目中,移动端要自适应,由于有时候数据不够,所以导致了有的区域空白 要求:没有数据的时候能够充满屏幕,数据超出屏幕就出现滚动条 做法 1-让容器高度充满这个屏幕 在容器内容很少的情况下,要想让这个容器 ...

  5. 用html怎么做动态立体图形,使用CSS创建一个炫酷的球体动画效果

    我最近看到了一个纯CSS实现的球体动画效果: 经过研究上面的效果实现起来大致可以分为五个步骤,下面就来一一介绍. 1.使用Jade和SCSS生成一个圆圈 创建一个圆圈的第一步是生成所有组成圆圈的粒子. ...

  6. 前端实现炫酷动效_最好的H5动效视频教程:HTML5炫酷动效案例

    一个元素,动态的往往比静态的更能吸引人们的注意力,由此推之,一个操作界面,活泼的动效交互反馈将会给用户带来更好的操作体验和感知.小到APP的Loading动画,大到各大网站炫酷的H5运营页的展现,可以 ...

  7. 前端实现炫酷动效_20个网页动效设计的炫酷神器

    如今很多 UI 设计师不是正在做动效,就正在学着做动效. 动效现在已经无处不在了.有的动效可能是一个微妙的悬停效果,使用 Bttn.css 或者是 Hover Buttons 的帮助下,添加到按钮上, ...

  8. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案

    web前端入门到实战:css实现的骨架屏方案 发布时间:2020-08-04 01:32:03 来源:51CTO 阅读:152 作者:前端向南 优点 简单,不需要工程,不用puppeteer生成骨架d ...

  9. web前端入门到实战:CSS动画之旋转魔方轮播

    下面我将一步一步详解如何利用纯CSS实现一个旋转魔方轮播的效果. 总的来说我们需要实现以下两个主要功能: 构建一个能够旋转的立方体 让立方体拥有基本轮播所具有的特性 但在完成以上两点之前我们需要再次了 ...

最新文章

  1. 每日一皮:不同的视角看待问题...
  2. Error:NgdBuild:604解决方法(添加NGC文件方法)
  3. 软件测试报告bug统计,软件测试中如何有效地写Bug报告
  4. servletcontext 使用解析
  5. 前端学习(2481):关于接口的调错
  6. spark.sql读取Hive数据报错
  7. 函数指针和指针函数(回调函数)
  8. Java高并发编程详解-代码在本地
  9. surfaceflinger类图
  10. 三角形一点到三边距离最小_三角形内有没有一个点到三边距离之和最小 -
  11. Nginx安装出现错误解决记录
  12. angr进阶(2)C++程序的处理
  13. 计算机网络的简单概述以及在浏览器中输入一个网址后如何执行
  14. c++ 图片验证码识别_图片验证码识别方法
  15. 一个完整机器学习项目的基本流程
  16. 论组织管理-EMBA课程小记
  17. 【源码】基于SIFT和RANSAC算法的高分辨率图像伪造检测
  18. iOS 支持3DTouch快捷菜单
  19. 【文献译文】OFDM Receiver Using Deep Learning: Redundancy Issues
  20. 当你试图将【圣杯布局】无限套娃__

热门文章

  1. 【java】HashMap底层实现原理及面试题
  2. 单键模式_购买单键或更换整个键盘是否更好?
  3. 关于路由器当无线交换机用
  4. Inserted和Deleted在insert、update、delete的简单使用
  5. zizhan - 瞄准镜
  6. HFSS(ANSYS Electronics)电路优化两种方法:参数扫描和目标优化
  7. python入门教学反思_Python语言教学反思 --方少芹名师工作室
  8. 如何消除音频输出端的喀嗒声
  9. Windows系统编译GSL2.7用于C语言编程(2022.5.8)
  10. 基于Altium Designer 20设计双层印刷电路板的详细步骤(待写)