css3+html5实现太阳系行星公转动画实例

模拟太阳系行情公转动画最终的效果图如下:


css3的animation是通过关键帧的形式做出来的,首先设定一个动画的运行时间,然后在这个时间轴上的若干位置处插入关键帧,浏览器根据关键帧设定的内容做过渡动画。animation一般结合transform属性进行制作。以一个简单的例子说明,以一个div,让其从左到右运动,如下图左所未(需要点下图片播放)


先用css画出静态的图,然后再加动画的属性。整个工程完整的代码见这个Demo。html如下:

<div class='space'>
    <div class='wheel'>
        <span class='line'></span>
     </div>
</div>

在轮子wheel加一个动画的属性,

.wheel{
  animation: move 3s linear infinite;
}

这个的意思是动画的名字是move,时间轴是3s,速度是匀速,播放次数无限。然后move的关键帧keyframes如下:

@keyframes move{
        100%{
            transform: translateX(350px);
        }
    }

即播放到末尾的时候,向X轴右移350px。在0%的时候值0,100%的时候值为350px,时间为3s,还有一个速度曲线的属性,根据这些信息做过渡动画。如果指定速度为线性linear,则动画的过渡效果是匀速的,对于上面来说就是匀速右移。默认的速度曲线为ease,就是渐进和渐出,中间播放比较快。

然后再给轮子添加一个滚动的效果rotate,用运行的距离除以轮子的周长得出需要滚动多少圈,即375 / (25 * 3.1415926 * 2) * 360 = 859.4度,也就是在这个区间向右移动的同时加上自转的效果,所以给transform添加多一个rotate的属性。

transform: translateX(350px) rotate(859.4deg);

这样就可以了:


这就是css3的animation动画,结合transform的大小、旋转、位移、斜切,通过两三行代码,便可做出很多有趣的效果。

接下来讨论太阳系的制作,跟上面不同的地方是行星是围绕着太阳转的,而轮子是围绕着自己的圆心转的,也就是说他们转的基点不同。可以看出,transform的基点默认是本身的中心center,所以我们要改变行星的进行转换的中心点transform-origin。完整的Demo。太阳系的html结构如下:

<div class="galaxy">
    <div class='sun'></div>
    <div class='mercury'></div>
    <div class='venus'></div>
    <div class='earth'></div>
</div>

 太阳位于div galaxy的中间,让其它行星位于太阳的右边排成一条线。设置galaxy的width和height都为1300px。sun图片的大小为100px*100px,所以sun的left值和top值都为(1300 - 100) / 2 = 600px,这样sun就位于中间位置。设置水星mercury的left值为700px,top为625px,这样水星就位于太阳偏右的位置。然后再设置transform-origin:

transform-origin: -50px 25px;

transform-origin的原点是作用的元素左上角位置,所以往左移(700 - 1300 / 2) = 50px,往下移60 / 2 = 30px(60为水星高度),水星转换的基点就变成了太阳的中心,在此基础上进行旋转:

animation: rotation 2.4s linear infinite;
@keyframes rotation{
    to{
        transform: rotate(1turn);
    }
}

注意这里改变了同义的属性,0%和100%分别换成from和to,360deg换成1turn。

其它的行星,也按照这种方法进行设置,计算稍微繁琐。公转的周期以地球10s为基准,其它按比例换算。这样就可以做出一个太阳系公转的图,原理很简单,效果却很好。

注意到行星运行的轨迹其实是椭圆形的,上面是用了正圆形。因此,下面讨论如何做一个椭圆的运行轨迹。效果图如下:


上面的椭圆在Y轴上被压扁了,可以考虑在Y轴上添加一个位移变换,原理如下图所示,首先将地球的初始位置放到椭圆和其短轴的交点处,然后transform-origin设置为半径为800px的圆心的位置,但运行时间为50%即到初始位置对面的时候,插入一个关键帧:做一个位移转换,向y轴负方向移动200px,这样就可以形成一个半椭圆的轨迹,到了100%的时候逐渐恢复为初始值0,跟前面的半椭圆相反,就可以完成一个完整的椭圆轨迹。


需要在earth的外面包一层div,用来设置translateY的效果,因为这个效果的时间曲线需要设置为ease-in-out渐进渐出的效果,让椭圆运行起来更加的顺畅,如果不设置的话渲染出来的动画会不太像椭圆轨迹。html的结构如下:

<div class='planet'>
        <div class='origin-circle'></div>
        <div class='sun'></div>
        <div class='track'></div>
        <div class='moveY'>
            <div class='earth'></div>
        </div>
</div>

给moveY添加一个translateY的动画,其它的一样。

.moveY{
  animation: moveY 2s ease-in-out infinite alternate;
}
@keyframes moveY{
  to{
    transform: translateY(-200px);
  }
}

注意这里将moveY的周期设置为旋转的一半,同时使用了一个transition-direction为alternate的属性,alternate意为交替,效果等同于

@keyframes moveY{
    0%,100%{
       transform: translateY(0px);
    }
  50%{
    transform: translateY(-200px);
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索属性
时间
太阳系行星公转周期、太阳系行星公转方向、太阳系行星公转速度、太阳系公转周期、太阳系公转,以便于您获取更多的相关知识。

时间: 2024-11-09 00:21:19

css3+html5实现太阳系行星公转动画实例的相关文章

jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)_jquery

弹出层用来向用户展示详细的信息,交互性非常强.弹出层有对话框.模态窗口等形式,这里我都把他们叫做弹出层,我的同事们也是这么叫的.一般我们喜欢使用比较成熟的弹出层插件如fancybox等,但在本文,我将先抛弃插件,给大家介绍如何使用jQuery+CSS3+Html5实现弹出层. 效果展示        源码下载 我们完全使用HTML5+CSS3+jQuery来实现一个基本的弹出层效果,因此我们可以在示例中任意修改弹出层外观样式.甚至js方法调用.我们最终做出来的弹出层效果应该是响应式的,也就是说可

CSS3 HTML5使用 RGBA 实现透明效果实例

目前,Web 设计中的透明效果主要靠 PNG 图片实现(但在 IE 浏览器支持得并不好 - 译者),在 CSS3,可以直接实现透明效果. rgba(200, 54, 54, 0.5); background: rgba(200, 54, 54, 0.5); color: rgba(200, 54, 54, 0.5); color: #000; opacity: 0.5; 支持的浏览器: Firefox, Safari, Chrome, Opera (opacity) 以及 IE7 (opacit

CSS3 HTML5块阴影与文字阴影实例

阴影效果曾让 Web 设计师既爱又恨,现在,有了 CSS3,你不再需要 Photoshop,已经有网站在使用这个功能了,如 24 Ways website. -webkit-box-shadow: 10px 10px 25px #ccc; -moz-box-shadow: 10px 10px 25px #ccc; box-shadow: 10px 10px 25px #ccc; 前两个属性设置阴影的 X / Y 位移,这里分别是 10px,第3个属性定义阴影的虚化程度,最后一个设置阴影的颜色.文

使用css3的动画模拟太阳系恒星公转

本文介绍使用css3的animation画一个太阳系恒星公转的动画,再加以改进,讨论如何画椭圆的运行轨迹.然后分析京东和人人网使用animation的实际案例,最后结合css3的clip-path做一些比较特别的动画. 太阳系最终的效果图如下: css3的animation是通过关键帧的形式做出来的,首先设定一个动画的运行时间,然后在这个时间轴上的若干位置处插入关键帧,浏览器根据关键帧设定的内容做过渡动画.animation一般结合transform属性进行制作.以一个简单的例子说明,以一个di

Sass自动化处理CSS动画实例教程

有一天,Harry Roberts有一段有关于他网站上的代码在twitter求教,如果有可能,在某些方面得到改善.Harry Roberts做的是使用keyframes的carousel动画,所以说使用一些数学计算是有可能得到相应改善.     "Why do we have to learn algebra, Miss? We're never going to use it-" -Everyone in my maths class bit.ly/UaM2wf 有什么好主意? 据我

【HTML5】H5新标签大实例

以下是测试Html5新标签性能的大实例: 首先是效果: 代码: <html> <head> <title>Test</title> </head> <body> <h2>header标签定义文档的页眉(介绍信息)</h2> <header> <h3>Welcome to my homepage</h3> <p>My name is Donald Duck</

Flash制作卷轴动画实例教程

  用Flash软件制作书法卷轴动画,是考试中必考的试题,本文对Flash制作卷轴动画实例 进行了具体阐述供阅读.大家请仔细阅读下文! 1.新建文档,然后导入图片,在舞台的第一帧拖入图片,调节到合适的大小并按(F8)转化为影片剪辑元件(提示:转化为影片剪辑的目的是为了能够使用模糊滤镜) 2.新建层,复制图层1的第一帧,粘贴到图层2的第一帧,在第二层的第一帧选择影片剪辑元件,在属性栏选择-添加滤镜-模糊(15左右,视舞台大小及图片分辨率),在图层1和图层2的第90帧按F5插入帧(提示:90帧是影片

Fireworks利用滤镜工具制作Gif动画实例教程

gif文件: png文件: R: 看了"小可爱"转的用fireworks插件制作3D的gif动画,实在强大. 介绍这个插件的文章有差不多这样一句话:按下"导出"按钮,可能有类似死机现象,但是只要耐心等待,总会输出gif. 晕,我家里的机是n年前的老牌货,看来要另想办法了. 乱碰乱撞之下,意想不到的事情发生了----- 1. 新建一个150*100px大小的画布, 用"星型工具"画一个四叶草图案,为它加一个"纯色阴影滤"镜. 按

JS运动框架之分享侧边栏动画实例

 这篇文章主要介绍了JS运动框架之分享侧边栏动画,实例分析了javascript操作div及css的技巧,需要的朋友可以参考下     本文实例讲述了JS运动框架之分享侧边栏动画实现方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type=&q