巧妙利用CSS3实现太阳系行星公转运动轨迹

前段时间在博客园看到一篇很不错的文章,就是介绍如何用CSS3来实现太阳系中行星的运动。本小姐处于好奇心从头到完整的看完了。突然发现好奇不仅仅害死猫,也可以增长知识嘛(你这是什么谬论!!!)。也许有的朋友看过有关的文章那么今天我们就一起来看看怎么巧妙的利用CSS3 来实现这么漂亮的动画的吧!

我不清楚大家对于CSS3的动画了解多少,但是我对于 CSS3的东西还是限制与用什么查什么的阶段。css3的animation动画,结合transform的大小、旋转、位移、斜切,通过两三行代码,便可做出很多有趣的效果。

看不到动态图的请点击以下图片应该就可以看到了

这篇文章我很早就想分享出来了,但是你们都知道我那么懒,(懒癌晚期了已经)。 在端午节之前我就自己写好了demo,但是每次回家都玩狗,压根不去开电脑。你们肯定在想没救了这人……

废话不扯了,我和别人的写法可能不一样,下面按照我的思路给大家介绍这个动画吧。

第一、动画实现的思路

在日常写项目的时候不管是大到后台的系统管理,还是小到一个宣传的单页,我都会先拿来分析一下再去着手制作(PS: 刚上班的时候有项目来就赶紧写,从来不把整个需求看完,结果就是全部从写,所以磨刀不误砍柴工,把我的惨痛经验送给初学者们)。

下面我们一起来分析一下这个动画的思路

  • 看图片我们知道这个是一个旋转动画所以我们会用到 CSS3 transform
  • 所有行星旋转围绕的中心都是太阳,而默认的都是自己的重心但是这里我们需要都是太阳 transform-origin (这个是重点)
  • @keyframes rotation 这个就是最后一步,当布局完成我们就可以加上动画了

第二、太阳系的HTML

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

class为 *-mercury-track 是行星的运行轨道

<div class="galaxy">
    <div class=‘sun‘></div>
    <div class=‘mercury-track‘></div>
    <div class=‘mercury‘></div>
    <div class=‘venus-track‘></div>
    <div class=‘venus‘></div>
    <div class=‘earth-track‘></div>
    <div class=‘earth‘></div>
    <div class=‘mars-track‘></div>
    <div class=‘mars‘></div>
    <div class=‘jupiter-track‘></div>
    <div class=‘jupiter‘></div>
    <div class=‘saturn-track‘></div>
    <div class=‘saturn‘></div>
    <div class=‘uranus-track‘></div>
    <div class=‘uranus‘></div>
    <div class=‘pluto-track‘></div>
    <div class=‘pluto‘></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);
    }
}

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

DEMO下载与演示

===============================

CSS3

================================

时间: 2024-12-21 18:17:38

巧妙利用CSS3实现太阳系行星公转运动轨迹的相关文章

html+ccs3太阳系行星运转动画

做一个太阳系八大行星的运转动画,不包括行星的卫星,所有行星围绕太阳公转,行星采用纯色,暂时没有自转. 效果静态图: 动画中包括:太阳及各行星,运行轨道,行星公转动画. 先画好草图,设计好大小和位置,根据公转周期计算好动画执行的时间. html的结构: 一个class为solarsys的div,作为太阳系容器元素,该div的position为relative. 行星轨道和行星都用div,position为absolute. 容器用relative和内部元素采用absolute的定位方式,比较简单的

three.js模拟实现太阳系行星体系

概况如下: 1.SphereGeometry实现自转的太阳: 2.RingGeometry实现太阳系星系的公转轨道: 3.ImageUtils加载球体和各行星贴图: 4.canvas中createRadialGradient实现太阳发光效果: 5.THREE.Sprite精灵实现太阳系行星. 效果图如下: 预览地址:three.js模拟实现太阳系行星体系 初始化场景.相机.渲染器,设置相机位置. 1 // 初始化场景 2 var scene = new THREE.Scene(); 3 // 初

如何利用CSS3实现完备的幻灯片(1)

概述:我所谓完备的幻灯片,乃指满足下列条件的页面效果: 1.包含左右箭头: 2.左右箭头能无限点击,产生无限循环切换的效果: 2.图片具有滑动效果: 3.包含与图片一一对应,用以切换的选项块: 4.选项块拥有两个状态,其一为普通,其二为「当前」,后者反映其自身与当前显示区的图片具有对应关系,该对应关系必须随时有效: 5.图片自动播放,并无限循环: 6.鼠标进入图片时,图片暂停播放: 7.鼠标离开图片时,图片按当前顺序继续播放,无限循环. 如上,它完备,未必完美. 本着循序渐进的原则,我先从利用c

如何利用CSS3与jQuery实现响应式导航

在前端开发中,我们常常需要利用CSS3 media queries + jQuery来实现响应式导航,那它的具体实现步骤和方法到底是怎样的呢?一起来看看吧,希望可以帮助大家更好地学习CSS3. 目的: 实现一个响应式导航,当屏幕宽度大于700px时,效果如下: 当屏幕宽度小于700px时,导航变成一个小按钮,点击之后有一个菜单慢慢拉下来: 思路: 1.为了之后在菜单上绑定事件,并且不向DOM中添加多余的节点,在大屏幕中出现的导航和小屏幕中的下拉导航必须是一个. 所以我选择了将导航绝对定位. 2.

利用CSS3 中steps()制用动画

.monster { width: 190px; height: 240px; margin: 2% auto; background: url('http://treehouse-code-samples.s3.amazonaws.com/CSS-DD/codepen/blog/monster.png') left center; animation: play .8s steps(10) infinite; } @keyframes play { 100% { background-posi

Unity手机开发之巧妙利用纹理制作滚动背景

巧妙利用纹理制作滚动背景 本次学习的主要知识点有以下: 1.如何创建滚动背景. 可以利用材质球,让其不断地偏移纹理,就可以达到这样的效果. 2.time 和deltaTime的区别[狗刨学习网] Time.time是表示游戏从开始到现在的时间,是一个增长值. Time.deltaTime是表示机器上帧与帧之间的时间间隔,是一个固定值. 使用方法是创建一个材质球,贴上我们想要的背景,让Panel附上材质球,调整好摄像机的位置,将脚本挂在我们之前创建的Panel上. using UnityEngin

利用css3制作旋转动画

利用css3功能强大,我们可以直接完成旋转动画的制作,而跳过复杂的javascript. html代码如下:demo01.html   <!DCTYPE html>       <head>           <meta type="utf-8"/>           <title>旋转动画</title>           <link rel="stylesheet" type="t

利用CSS3制作淡入淡出动画效果

CSS3新增动画属性“@-webkit-keyframes”,从字面就可以看出其含义——关键帧,这与Flash中的含义一致. 利用CSS3制作动画效果其原理与Flash一样,我们需要定义关键帧处的状态效果,由CSS3来驱动产生动画效果. 下面讲解一下如何利用CSS3制作淡入淡出的动画效果.具体实例可参考刚进入本站时的淡入效果. 1. 定义动画,名称为fadeIn @-webkit-keyframes fadeIn { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% {

如何利用CSS3编写一个满屏的布局

如何利用CSS3编写一个满屏的布局 css3的出现能帮助我们更加轻松的实现各种想要的效果,例如写一个刚好满屏的布局,我们就可以利用CSS3的弹性盒模型来实现. 先来贴出html布局代码: 1 <%- include header %> 2 <div class="wrapper"> 3 <div id="appswall"> 4 <div class="adsapp-title"><butto