日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > CSS >内容正文

CSS

css3抽奖转盘,从零制作CSS3抽奖大转盘

發布時間:2024/10/8 CSS 133 豆豆
生活随笔 收集整理的這篇文章主要介紹了 css3抽奖转盘,从零制作CSS3抽奖大转盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天的任務是做一個純CSS3的還算比較漂亮的抽獎大轉盤,也就是下圖效果。

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

Paste_Image.png

外盤

外盤是指有彩燈的深橙色圓環,以及圓環的外邊線。

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

彩燈

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

CSS方面:

1、.illumination需要聲明list-style: none;以及高度值。它的li的CSS先保證所有li位于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遠離初始位置136px,然后每個彩燈都有不同的旋轉角度。居頂的燈就是0deg,右側的第一個燈就是15deg,然后是30deg,類推下去。這樣大家就形成了一圈彩燈。

3、加閃爍動畫。我設了一個四關鍵幀的動畫,總是就是一頓亂閃。填充色先是白色,后是黃色,光圈也變來變去。

@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整體設上animation: twinkling 1.2s infinite ease-in-out;,1.2秒一個周期。

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

.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;

}

然后,奇數li都設上animation-delay: .6s;,這樣才是交錯閃爍。

到此,彩燈完成。

扇面

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

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

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

}

/* 還有三個li從略 */

獎品名稱

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

CSS方面,原理是在li中正常寫字和放圖,比如


理財金
100元,然后分別做定位和旋轉,即可。

.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);

}

指針

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

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

#triangle-up {

width: 0;

height: 0;

border-left: 50px solid transparent;

border-right: 50px solid transparent;

border-bottom: 100px solid red;

}

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

彩燈的圓環以及毛邊,用一個div來做;

“點擊抽獎”的深色背景,和亮黃色的環,用另一個div來做。

指針旋轉動畫

理論上應該由js庫來操縱旋轉,因為這涉及到概率計算的問題。如果非要純CSS3來控制旋轉,可以是:

1、關鍵幀:0%是0deg,100%是360deg,先讓指針勻速的轉動,然后JS向后臺發送請求,等待服務器返回是否中獎。只要沒有返回,就一直一圈又一圈的轉。

2、當服務器返回結果,其結果最好是旋轉角度,也就是說,到底是停到那個扇區,假定停到30度,那么我們計算一個角度數值,就是1800+30,也就是再旋轉1830度就停,為什么要有1800呢?因為你要讓指針慢慢停啊!這個值需要JS動態生成,所以這就是麻煩所在,需要js動態生成@keyframes。可以寫一段CSS插入DOM。

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

謝謝大家觀看。

總結

以上是生活随笔為你收集整理的css3抽奖转盘,从零制作CSS3抽奖大转盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。