成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用CSS創(chuàng)建一個炫酷的球體動畫效果

jsdt / 2431人閱讀

摘要:我最近看到了一個純實現(xiàn)的球體動畫效果經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來一一介紹。使用和生成一個圓圈創(chuàng)建一個圓圈的第一步是生成所有組成圓圈的粒子。

我最近看到了一個純CSS實現(xiàn)的球體動畫效果:

經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來一一介紹。

1.使用Jade和SCSS生成一個圓圈

創(chuàng)建一個圓圈的第一步是生成所有組成圓圈的粒子。有了Jade,我們不用一個一個的寫出200個div。

以下的代碼創(chuàng)建了一個容器.mommy和200個div:

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

添加一點(diǎn)CSS確認(rèn)一下200個div已經(jīng)生成:

.mommy{
  border:1px solid black;
}
div{
  width: 4px;
  height: 4px;
  background:red;
}

正如下面你所看到的,我們生成了一個800px高的紅色方塊,它是由200個div組成的。

接下來,我們要將這200個div分別定位在不同的位置組成一個圓圈,并通過SCSS來實現(xiàn)。

在上面的CSS中還需要再添加一些設(shè)置,給所有的div設(shè)置絕對定位,并將它們向左和向上移動2px的距離,這樣div的中心點(diǎn)與容器的0,0坐標(biāo)點(diǎn)就重合了。然后,我們設(shè)置容器為固定的寬高大小。

.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循環(huán)中為每一個div設(shè)置不同的位置,這樣就不必手動的一個一個去設(shè)置。首先創(chuàng)建一個變量,它的值等于div的個數(shù),這樣在后面如果要用到div的數(shù)量值時,直接引用這個變量就可以了。如果有一天需要改變成400個div,只需要在CSS中改變變量的值就可以了。

$amount : 200;
@for $i from 1 through $amount {
  //循環(huán)中的代碼
}

現(xiàn)在我們就可以在循環(huán)中改變每個div的坐標(biāo)了,這需要一點(diǎn)點(diǎn)的數(shù)學(xué)計算。

以下的函數(shù)就是生成圓圈的坐標(biāo)點(diǎn)的計算公式:

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;

然后我們將通過公式計算得出的點(diǎn)坐標(biāo)應(yīng)用在每個div上:

div:nth-child(#{$i}){
    transform: translate3d($x, $y,0px);
}

這是第一步生成的結(jié)果,雖然不是很漂亮,但是,嗯,你從零開始創(chuàng)造了一個圓圈!

2.將圓圈變成一個球體

現(xiàn)在我們有了一個用SCSS生成的圓圈,但是我們需要的是一個球體。圓圈是一個二維圖形,而球體是一個三維立體圖形。二維幾何圖形只有兩個軸:X軸和Y軸,而對于三維,又多了一個坐標(biāo)軸:Z軸。這意味著我們還要計算每個div在Z軸上的位置坐標(biāo)。幸運(yùn)的是,已經(jīng)有成熟的公式幫助我們來定位球體上每個元素的位置,我不會詳細(xì)的介紹公式的原理(屬于數(shù)學(xué)范疇),我們只需要使用就可以了:

θ : (index / amount) * 120;
δ : (index / amount) * PI;
x : radius * cos(δ) * cos(θ);
y : radius * cos(δ) * sin(θ);
z : radius * sin(δ);

現(xiàn)在我們有了以上的函數(shù),它可以完全滿足我們的需求,我們把它插入到循環(huán)中。

@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的屬性,它允許我們?yōu)槿魏卧卦O(shè)置一個特定的透視值。在我們的例子中,我們希望在容器.mommy設(shè)置3D效果。并且還需要設(shè)置一個transform-style: preserve-3d;這樣所有的div就處于立體坐標(biāo)系中了。

現(xiàn)在我們可以看到所有div的大小都變得不一樣了。div距離“屏幕”的距離越遠(yuǎn),它就會越小,這意味著它們已經(jīng)處于立體坐標(biāo)系中了!

3.旋轉(zhuǎn)球體

所有的div已經(jīng)就緒了,接下來我們就要看到最后的結(jié)果了。我們設(shè)置一個僅有一個關(guān)鍵幀的動畫效果:

.mommy{
  [...]
  animation: rotation 10s linear infinite; 
}
@keyframes rotation{
  to{
    transform:rotateY(360deg);
  }
}

你可能已經(jīng)注意到,有些div不是正面屏幕而是與屏幕成90°時,它們就會消失看不到。為了防止這種情況的發(fā)生,我們需要給每個div一個反方向的旋轉(zhuǎn),讓它們的正面始終面對屏幕顯示。

我們要在div上應(yīng)用一個反方向的旋轉(zhuǎn),但是由于已經(jīng)應(yīng)用了一個轉(zhuǎn)換,我們將利用偽元素,它將成為紅色的小方塊。這樣,div本身只需要提供定位作用就可以了,并且設(shè)置一個transform-style屬性,讓div處于3D環(huán)境中。

div{
  [...]
  transform-style: preserve-3d;
  &:before{
    content:"";
    display: block;
    width: 4px;
    height:4px;
    background:red;
    animation: rotation 10s infinite linear reverse; 
  }
}

塔達(dá)!CSS球體的效果就這樣做好了!

4.更炫的球體

在以上代碼的基礎(chǔ)上,我們發(fā)散思維,可以做出更加炫酷的球體效果:


獲取以上所有球體動畫的代碼可以:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/54028.html

相關(guān)文章

  • 使用CSS創(chuàng)建一個酷的球體動畫效果

    摘要:我最近看到了一個純實現(xiàn)的球體動畫效果經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來一一介紹。使用和生成一個圓圈創(chuàng)建一個圓圈的第一步是生成所有組成圓圈的粒子。 我最近看到了一個純CSS實現(xiàn)的球體動畫效果: showImg(https://segmentfault.com/img/bVbtIJD?w=396&h=373); 經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來...

    zacklee 評論0 收藏0
  • 使用CSS創(chuàng)建一個酷的球體動畫效果

    摘要:我最近看到了一個純實現(xiàn)的球體動畫效果經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來一一介紹。使用和生成一個圓圈創(chuàng)建一個圓圈的第一步是生成所有組成圓圈的粒子。 我最近看到了一個純CSS實現(xiàn)的球體動畫效果: showImg(https://segmentfault.com/img/bVbtIJD?w=396&h=373); 經(jīng)過研究上面的效果實現(xiàn)起來大致可以分為五個步驟,下面就來...

    int64 評論0 收藏0
  • 利用CSS變量實現(xiàn)酷的懸浮效果

    摘要:最近,我從網(wǎng)站上發(fā)現(xiàn)以一個好玩兒的懸停動畫,也有了些自己的靈感。用包裹文本,以避免顯示在按鈕的上方。將和初始化為,當(dāng)用戶懸停在按鈕上時,將其改為。 最近,我從 Grover網(wǎng)站上發(fā)現(xiàn)以一個好玩兒的懸停動畫,也有了些自己的靈感。這個動畫是將鼠標(biāo)移動到訂閱按鈕上移動光標(biāo)會顯示相應(yīng)的彩色漸變。這個想法很簡單,但是它能使這個按鈕脫穎而出,人們一下子就注意到它了,增加了點(diǎn)擊的概率。showImg...

    laoLiueizo 評論0 收藏0
  • 利用CSS變量實現(xiàn)酷的懸浮效果

    摘要:最近,我從網(wǎng)站上發(fā)現(xiàn)以一個好玩兒的懸停動畫,也有了些自己的靈感。用包裹文本,以避免顯示在按鈕的上方。將和初始化為,當(dāng)用戶懸停在按鈕上時,將其改為。 最近,我從 Grover網(wǎng)站上發(fā)現(xiàn)以一個好玩兒的懸停動畫,也有了些自己的靈感。這個動畫是將鼠標(biāo)移動到訂閱按鈕上移動光標(biāo)會顯示相應(yīng)的彩色漸變。這個想法很簡單,但是它能使這個按鈕脫穎而出,人們一下子就注意到它了,增加了點(diǎn)擊的概率。showImg...

    vincent_xyb 評論0 收藏0
  • 前端每日實戰(zhàn):17# 視頻演示如何用純 CSS 創(chuàng)作酷的同心矩形旋轉(zhuǎn)動畫

    摘要:效果預(yù)覽按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接可以全屏預(yù)覽??山换ヒ曨l教程此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。 showImg(https://segmentfault.com/img/bVbbyrX?w=500&h=500); 效果預(yù)覽 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接可以全屏預(yù)覽。 https://codepen.io/comeh...

    luqiuwen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<