成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用css3的動畫模擬太陽系恒星公轉

開發
本文介紹使用css3的animation畫一個太陽系恒星公轉的動畫,再加以改進,討論如何畫橢圓的運行軌跡。然后分析京東和人人網使用animation的實際案例,最后結合css3的clip-path做一些比較特別的動畫。

本文介紹使用css3的animation畫一個太陽系恒星公轉的動畫,再加以改進,討論如何畫橢圓的運行軌跡。然后分析京東和人人網使用animation的實際案例,***結合css3的clip-path做一些比較特別的動畫。

太陽系最終的效果圖如下:

  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為基準,其它按比例換算。這樣就可以做出一個太陽系公轉的圖,原理很簡單,效果卻很好。

  注意到行星運行的軌跡其實是橢圓形的,上面是用了正圓形。因此,下面討論如何做一個橢圓的運行軌跡。查看完整的Demo。效果圖如下:

 

  上面的橢圓在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);
  }
}

  (未完待續。。。)

責任編輯:李英杰 來源: 博客園
相關推薦

2012-09-13 09:24:31

CSSJSjQ

2021-09-08 22:28:13

前端Css3動畫

2017-05-11 15:20:52

CSS3動畫前端

2011-06-29 13:22:58

CSS3

2013-01-30 15:59:29

adobeCSS3HTML5

2014-04-29 10:39:27

CSS3JavaScript

2012-04-19 15:38:19

互聯網

2022-10-11 23:26:54

css3attr函數

2012-12-26 10:34:56

CSSWeb前端

2024-03-28 09:11:24

CSS3TransitionCSS屬性

2013-01-30 16:15:40

adobeHTML5css3

2021-06-09 08:30:52

CSS33D旋轉視圖3D動畫

2015-12-01 09:52:03

CSS3動畫源碼

2012-03-02 10:50:20

jQuery

2023-05-09 12:31:48

CSS3動畫庫場景

2024-04-28 08:31:47

CSS3Clamp()函數響應式設計工具

2017-05-03 11:30:20

CSS3小黃人動畫

2021-01-05 08:10:00

Css前端3D旋轉透視

2015-10-09 09:43:28

CSS CSS3

2011-11-25 13:18:40

HTML 5
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产在线 | 欧美视频 亚洲视频 | 精品综合视频 | 麻豆一区一区三区四区 | 亚洲精品久久视频 | 曰韩一二三区 | 欧美日产国产成人免费图片 | 国产一区二区在线观看视频 | 精品国产乱码久久久久久丨区2区 | 久久国产三级 | 91久久精品日日躁夜夜躁国产 | 久久久123 | 一本色道久久综合亚洲精品高清 | 中文字幕视频在线看 | 欧美一区二区三 | 久久久久久久久久久丰满 | 国产欧美精品一区二区三区 | 国产精品美女久久久久久免费 | 玖玖久久 | 久久久女女女女999久久 | 日韩成人在线观看 | 久久青视频 | 国产精品久久久久久久久久三级 | 亚洲美女一区 | av免费入口| 9191在线播放| 久久国产精品视频观看 | 日韩三级在线 | 欧美视频中文字幕 | www.99精品 | 日韩精品在线观看一区二区三区 | 欧美日韩精品久久久免费观看 | 麻豆亚洲| 欧美 日韩 在线播放 | 久久久精品一区 | 日韩图区 | 欧美日韩亚洲二区 | 99免费视频 | 国产丝袜av| 日本午夜精品一区二区三区 | 成人影院网站ww555久久精品 |