從零制作CSS3抽獎(jiǎng)大轉(zhuǎn)盤

今天的任務(wù)是做一個(gè)純CSS3的還算比較漂亮的抽獎(jiǎng)大轉(zhuǎn)盤,也就是下圖效果。

我只說思路和重要的CSS3代碼。

Paste_Image.png

外盤

外盤是指有彩燈的深橙色圓環(huán),以及圓環(huán)的外邊線。

外盤設(shè)一個(gè)div.lottery-box作為容器,border-radius為50%,邊框厚度為20px,顏色就是深橙色。外邊線的淺橙色,用box-shadow: 0px 0px 0 4px #febd04;來實(shí)現(xiàn)。

彩燈

HTML方面,用 div.lottery-box>ul.illumination>li*24 構(gòu)建。illumination就是彩燈的意思。也就是說我們弄24個(gè)li作為24盞燈。

CSS方面:

1、.illumination需要聲明list-style: none;以及高度值。它的li的CSS先保證所有l(wèi)i位于ul的正中央,然后做成圓形:

    display: block;
    width: 8px;
    height: 8px;
    background: #fff;
    position: absolute;
    top: 50%;
    left: 50%;
    margin: -4px 0 0 -4px;
    border-radius: 4px;

2、然后要用到transform: rotate(0deg) translateY(-136px);,原理是讓彩燈li遠(yuǎn)離初始位置136px,然后每個(gè)彩燈都有不同的旋轉(zhuǎn)角度。居頂?shù)臒艟褪?deg,右側(cè)的第一個(gè)燈就是15deg,然后是30deg,類推下去。這樣大家就形成了一圈彩燈。

3、加閃爍動(dòng)畫。我設(shè)了一個(gè)四關(guān)鍵幀的動(dòng)畫,總是就是一頓亂閃。填充色先是白色,后是黃色,光圈也變來變?nèi)ァ?/p>

@keyframes twinkling{
    0%{
        background: #fefdfc;
        border: 1px solid #fefdfc;
    }   
    25%{
        background: #fefdfc;
        border: none;
        box-shadow: 0px 0px 0 2px #eb6f21;
    }
    75%{
        background: #fefe00;
        border: 1px solid #fefe00;
    }
    100%{
        background: #fefe00;
        border: none;
        box-shadow: 0px 0px 0 2px #eb6f21;
    }
}

給li整體設(shè)上animation: twinkling 1.2s infinite ease-in-out;,1.2秒一個(gè)周期。

然后,用:nth-child()選擇器給每個(gè)li設(shè)不同的角度值。

.illumination li:nth-child(1) {
    -webkit-transform: rotate(0deg) translateY(-136px);
    -moz-transform: rotate(0deg) translateY(-136px);
    transform: rotate(0deg) translateY(-136px);
    animation-delay: .6s;
}

然后,奇數(shù)li都設(shè)上animation-delay: .6s;,這樣才是交錯(cuò)閃爍。

到此,彩燈完成。

扇面

扇面更有意思,比彩燈的知識(shí)還冷僻一些。

HTML方面:新建ul.lottery-sector作為ul.illumination的兄弟元素,然后里面六個(gè)li作為扇區(qū)。

CSS方面:

1、容器CSS如下,保證它是圓形的就行了。

.lottery-sector {
    list-style: none;
    width: 250px;
    height: 250px;
    position: absolute;
    overflow: hidden;
    top: 0;
    border-radius: 50%;
    border: 4px solid #febd04;
}

2、li的CSS是關(guān)鍵。原理就兩句:transform-origin: 100% 100%;transform: rotate(0deg) skew(30deg);也就是以右下角為變形中心,先旋轉(zhuǎn),然后傾斜。比如第一個(gè)li(就是左上角的那個(gè)扇區(qū)),旋轉(zhuǎn)角度是0也就是不旋轉(zhuǎn),然后傾斜30度,這樣它就向左傾斜了30度,形成了平行四邊形,這個(gè)四邊形的右下角的角度就是——60度。到此,第一個(gè)li成了一個(gè)平行四邊形,其中有用的部分就是它的右下角。雖然它是平行四邊形,但是被ul一裁剪,就形成了一個(gè)扇形。這就是我們最終要的扇形。第二個(gè)li也是一樣的道理,也是要它的扇形,只不過它旋轉(zhuǎn)了60度。

.lottery-sector li {
    margin: 0;
    width: 125px;
    height: 125px;
    position: absolute;
    transform-origin: 100% 100%;
}

.lottery-sector li:nth-child(1) {
    background-color: #FEFEFE;
    transform: rotate(0deg) skew(30deg);
}

.lottery-sector li:nth-child(2) {
    background-color: #FFF0D0;
    transform: rotate(60deg) skew(30deg);
}

.lottery-sector li:nth-child(3) {
    background-color: #FEFEFE;
    transform: rotate(120deg) skew(30deg);
}

/* 還有三個(gè)li從略 */

獎(jiǎng)品名稱

HTML方面,新建ul.lottery-gift作為ul.sector的兄弟元素,然后里面六個(gè)li作為扇區(qū)。

CSS方面,原理是在li中正常寫字和放圖,比如<li><br>理財(cái)金<br>100元</li>,然后分別做定位和旋轉(zhuǎn),即可。

.lottery-gift {
    list-style: none;
    width: 250px;
    height: 250px;
    position: absolute;
    top: 0;
}

.lottery-gift li {
    position: absolute;
    display: block;
    margin: 0;
    width: 125px;
    height: 125px;
    color: #F44336;
    font-size: 14px;
    line-height: 1.4;
    font-weight: bold;
    text-align: center;
    list-style: none;
}

.lottery-gift li:nth-child(1) {
    top: 28px;
    transform: rotate(300deg);
}

.lottery-gift li:nth-child(2) {
    top: -11px;
    left: 65px;
}

.lottery-gift li:nth-child(3) {
    top: 28px;
    left: 127px;
    transform: rotate(60deg);
}

指針

指針你可以做一張圖,也可以繼續(xù)用CSS3來制作。指針分成兩部分:一個(gè)尖角,和一個(gè)圓盤。

1、尖角的做法,設(shè)寬高為0,只用border去形成:

#triangle-up {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
}

2、圓盤的做法跟上文彩燈的原理是一樣的:

彩燈的圓環(huán)以及毛邊,用一個(gè)div來做;

“點(diǎn)擊抽獎(jiǎng)”的深色背景,和亮黃色的環(huán),用另一個(gè)div來做。

指針旋轉(zhuǎn)動(dòng)畫

理論上應(yīng)該由js庫(kù)來操縱旋轉(zhuǎn),因?yàn)檫@涉及到概率計(jì)算的問題。如果非要純CSS3來控制旋轉(zhuǎn),可以是:

1、關(guān)鍵幀:0%是0deg,100%是360deg,先讓指針勻速的轉(zhuǎn)動(dòng),然后JS向后臺(tái)發(fā)送請(qǐng)求,等待服務(wù)器返回是否中獎(jiǎng)。只要沒有返回,就一直一圈又一圈的轉(zhuǎn)。

2、當(dāng)服務(wù)器返回結(jié)果,其結(jié)果最好是旋轉(zhuǎn)角度,也就是說,到底是停到那個(gè)扇區(qū),假定停到30度,那么我們計(jì)算一個(gè)角度數(shù)值,就是1800+30,也就是再旋轉(zhuǎn)1830度就停,為什么要有1800呢?因?yàn)槟阋屩羔樎0。∵@個(gè)值需要JS動(dòng)態(tài)生成,所以這就是麻煩所在,需要js動(dòng)態(tài)生成@keyframes。可以寫一段CSS插入DOM。

3、這個(gè)1830度,可以設(shè)animation: zhuanzhuanzhuan 4s forwards ease-in-out;,其中forwards表示停在最終一幀,ease-in-out表示先慢后快最后慢。

謝謝大家觀看。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,652評(píng)論 0 7
  • Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)聲明位于位于HTML文檔中的第一行,處于 標(biāo)簽之前。...
    MrThorn閱讀 613評(píng)論 0 1
  • 第5章 菜單、按鈕及導(dǎo)航 一、下拉菜單 小伙伴們注意,在Bootstrap框架中的下拉菜單組件是一個(gè)獨(dú)立的組件,根...
    凜0_0閱讀 5,024評(píng)論 0 66
  • ?前端面試題匯總 一、HTML和CSS 21 你做的頁(yè)面在哪些流覽器測(cè)試過?這些瀏覽器的內(nèi)核分別是什么? ...
    Simon_s閱讀 2,225評(píng)論 0 8
  • 管理包依賴是 Maven 核心功能之一,下面通過如何引入 jar 包;如何解析 jar 包依賴;包沖突是如何產(chǎn)生;...
    data4閱讀 11,953評(píng)論 3 16