微信小程序之大專(zhuān)盤(pán)抽獎(jiǎng)

先看下效果圖


轉(zhuǎn)盤(pán).png
中獎(jiǎng).png

轉(zhuǎn)盤(pán)要點(diǎn):

1.獎(jiǎng)品圖片的分布
2.輪盤(pán)轉(zhuǎn)動(dòng)
3.輪盤(pán)停止時(shí)狈孔,中獎(jiǎng)獎(jiǎng)品

說(shuō)下實(shí)現(xiàn)思路

首先根據(jù)設(shè)計(jì)圖紙哺哼,把轉(zhuǎn)盤(pán)布在頁(yè)面上呜舒,圓盤(pán)和轉(zhuǎn)盤(pán)指針要分開(kāi)反璃,一般有兩種轉(zhuǎn)法
1.轉(zhuǎn)盤(pán)轉(zhuǎn)麸塞,指針不轉(zhuǎn)
2.轉(zhuǎn)盤(pán)不轉(zhuǎn)秃臣,指針轉(zhuǎn)
這里我選擇第一種,轉(zhuǎn)盤(pán)轉(zhuǎn)動(dòng)

獎(jiǎng)品圖片的分布

當(dāng)轉(zhuǎn)盤(pán)布局好之后哪工,我們要把獎(jiǎng)品放入大轉(zhuǎn)盤(pán)當(dāng)中奥此。假設(shè)轉(zhuǎn)盤(pán)上有8個(gè)獎(jiǎng)品。以12點(diǎn)鐘方向設(shè)為0°雁比,按照順時(shí)針?lè)较蛎總€(gè)獎(jiǎng)品的角度如下圖顯示


獎(jiǎng)品分布角度.jpg

頁(yè)面加載時(shí)稚虎,已經(jīng)將用于大轉(zhuǎn)盤(pán)內(nèi)容的信息 , 包括獎(jiǎng)品旋轉(zhuǎn)角度偎捎、 獎(jiǎng)品名稱(chēng)蠢终、 獎(jiǎng)品圖片在頁(yè)面渲染出來(lái)

//頁(yè)面加載
  onLoad: function () {
    var that = this;
    var awardsList = that.data.awardsList;
    var awards = that.data.awards;
    var html = [];//用于大轉(zhuǎn)盤(pán)內(nèi)容的信息  包括獎(jiǎng)品旋轉(zhuǎn)角度  獎(jiǎng)品名稱(chēng)  獎(jiǎng)品圖片
    var len = awards.length;
    console.log(len)
    var rotateNum = 1 / len;//圓分成幾份
    for (var i = 0; i < len; i++) {
      var rotateDeg = (360 * rotateNum * i) ;//獎(jiǎng)品旋轉(zhuǎn)角度
      html.push({ rotate: rotateDeg, name: awards[i].name, img: awards[i].proimg })
    }
    that.setData({
      awardsList: html
    })
  },

js

data參數(shù)設(shè)置

data: {
    //抽獎(jiǎng)次數(shù)
    cjTime: "1",

    //轉(zhuǎn)盤(pán)參數(shù)
    animationData: {},//轉(zhuǎn)盤(pán)動(dòng)畫(huà)
    awardsList: {},//獎(jiǎng)品列表
    awards: [
      {
        id: 0,
        name: "iphone x0",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 1,
        name: "iphone x1",
        proimg: "https://img.alicdn.com/bao/uploaded/i3/1669409267/TB2Alo8dTmWBKNjSZFBXXXxUFXa_!!1669409267.jpg_b.jpg"
      },
      {
        id: 2,
        name: "iphone x2",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 3,
        name: "iphone x3",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 4,
        name: "iphone x4",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 5,
        name: "iphone x5",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 6,
        name: "iphone x6",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
      {
        id: 7,
        name: "iphone x7",
        proimg: "https://img.alicdn.com/bao/uploaded/i7/TB1TZgmGFXXXXb1XFXXxWT0.VXX_082827.jpg_b.jpg"
      },
    ],
    Finalawards: [],//最終獲得獎(jiǎng)品

    //中獎(jiǎng)彈框
    zjMask: true

輪盤(pán)轉(zhuǎn)動(dòng)

點(diǎn)擊抽獎(jiǎng)時(shí),轉(zhuǎn)盤(pán)以低速開(kāi)始茴她,然后加快寻拂,在結(jié)束前變慢的速度轉(zhuǎn)動(dòng),通過(guò)生成隨機(jī)數(shù)來(lái)指定中獎(jiǎng)獎(jiǎng)品丈牢〖蓝ぃ可以根據(jù)個(gè)人需要,來(lái)設(shè)定轉(zhuǎn)盤(pán)轉(zhuǎn)動(dòng)的時(shí)長(zhǎng)和圈數(shù)己沛。

 //大轉(zhuǎn)盤(pán)抽獎(jiǎng)
  getLottery: function () {
   var that = this;
   var awards = that.data.awards;
   var len = awards.length;
   var awardIndex = Math.floor(Math.random() * 8);//轉(zhuǎn)盤(pán)中獎(jiǎng)號(hào)碼
   //console.log(awardIndex)

   //初始化轉(zhuǎn)盤(pán) rotate
   var animationInit = wx.createAnimation({
     duration: 1
   })
   this.animationInit = animationInit;
   animationInit.rotate(0).step()
   this.setData({
     animationData: animationInit.export(),
   })

   // 旋轉(zhuǎn)抽獎(jiǎng)
   setTimeout(function () {
     var animationRun = wx.createAnimation({
       duration: 4000,
       timingFunction: 'ease'//動(dòng)畫(huà)以低速開(kāi)始朴皆,然后加快帕识,在結(jié)束前變慢

     })
     that.animationRun = animationRun
     animationRun.rotate(360 * 4 - (awardIndex * 360 / len ).step()
     that.setData({
       animationData: animationRun.export()
     })
   }, 100)

輪盤(pán)停止時(shí),彈出中獎(jiǎng)獎(jiǎng)品

    //中獎(jiǎng)
    var cjTime = this.data.cjTime;
    var Finalawards = this.data.Finalawards;
    Finalawards.push({ Fname: awards[awardIndex].name, Fimg: awards[awardIndex].proimg });
    cjTime--;
    console.log(cjTime)
    if (cjTime < 0) {
      console.log("抽獎(jiǎng)次數(shù)用完")
      wx.showModal({
        title: '您的抽獎(jiǎng)機(jī)會(huì)用完啦',
        content: '',
      })
    } else {
      setTimeout(function () {
        that.setData({
          zjMask: false,
          cjTime: cjTime,
          Finalawards: Finalawards
        })
      }, 5000)
    }
  },

視圖層頁(yè)面代碼

wxml

<view class="bg-purple">
<view class="zp-wrap">
    <view class="zp-pan" animation="{{animationData}}" >  
          <image src="../../images/zp-bg.png" class="zp-bg"/> 
         <view class="awardsList">
          <view class="item" wx:for="{{awardsList}}" wx:key="unique" style="-webkit-transform:rotate({{item.rotate}}deg)">
            <view class="txt">{{item.name}}</view>
            <image mode="widthFix" src="{{item.img}}" />
          </view>
        </view>  
    </view>
    <image mode="widthFix" src="../../images/zp-pointer.png" class="zp-pointer" bindtap="getLottery" />      
  </view>
</view>

<view class="mask zj-wrap-mask" hidden="{{zjMask}}">
  <view class="zj-wrap">
    <image src="../../images/img-guang-big.png" class="guang-big"/>
    <image src="../../images/img-zj.png" class="img-zj"/>
    <view class="zj-cont" wx:for="{{Finalawards}}" wx:key="unique">
        <view class="zj-mes">
            獲得"<text>{{item.Fname}}</text>"一部
        </view>
        <view class="tc">
          <image mode="widthFix" src="{{item.Fimg}}" />
        </view>
    </view>
  </view>
</view>

通過(guò)行內(nèi)樣式rotate來(lái)讓獎(jiǎng)品按照一定的角度布局在轉(zhuǎn)盤(pán)上

wxss

page{height: 100%;}
view{box-sizing: border-box;}
.mask{position:fixed; z-index: 9999; top:0; left:0; width: 100%; height:100%; background-color: rgba(0,0,0,.5);}
.bg-purple{ background-color: #37165e;height: 100%;}
.tc{text-align: center}

/*大轉(zhuǎn)盤(pán)*/
.zp-wrap{position:relative; margin:auto;  width:618rpx; height:618rpx; }
.zp-pan{height:100%;}
.zp-bg{position:absolute; z-index: 1; top:0; left:0; width: 618rpx; height:618rpx; }
.zp-pointer{position:absolute; z-index: 20; top:50%; left:50%; -webkit-transform: translate(-50%,-50%);transform: translate(-50%,-50%); width: 200rpx; }
.awardsList{ position:absolute; z-index: 10; top:0rpx; left:0rpx; width: 100%; height:100%;}
.awardsList .item{position:absolute; z-index: 10; top:0rpx; left:0rpx; padding:70rpx; width: 100%; height:100%; text-align: center; -webkit-transform-origin: 50% 310rpx;transform-origin: 50% 310rpx;}
.awardsList .item .txt{ margin-bottom: 10rpx; font-size:26rpx; color:#fa5200;}
.awardsList .item image{ width: 70rpx;}

/*按鈕*/
.zp-btn{margin-top:100rpx;}
.zp-btn button{margin-bottom: 45rpx;}

/*中獎(jiǎng)彈框*/
.zj-wrap-mask{ background-color: #000;}
.zj-wrap{position:relative; margin:auto; margin-top: 50rpx; width: 750rpx; height:750rpx; }
.guang-big{ width:100%; height:100%;}
.img-zj{ position:absolute; top:150rpx; left:110rpx;  width:522rpx; height:452rpx;}
.zj-cont{position:absolute; top:300rpx; left:220rpx; width: 300rpx; }
.zj-mes{margin-bottom: 20rpx; color:#0a0a0a; font-size:26rpx; line-height: 40rpx; text-align: center;}
.zj-mes text{color:#ff2e82;}
.zj-cont image{width:140rpx;}

上述三個(gè)要點(diǎn)完成后遂铡,轉(zhuǎn)盤(pán)就可以轉(zhuǎn)起來(lái)了肮疗!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扒接,隨后出現(xiàn)的幾起案子伪货,更是在濱河造成了極大的恐慌,老刑警劉巖钾怔,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碱呼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宗侦,警方通過(guò)查閱死者的電腦和手機(jī)愚臀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矾利,“玉大人姑裂,你說(shuō)我怎么就攤上這事∧衅欤” “怎么了舶斧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)察皇。 經(jīng)常有香客問(wèn)我茴厉,道長(zhǎng),這世上最難降的妖魔是什么什荣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任矾缓,我火速辦了婚禮,結(jié)果婚禮上稻爬,老公的妹妹穿的比我還像新娘嗜闻。我一直安慰自己,他們只是感情好因篇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著笔横,像睡著了一般竞滓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吹缔,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天商佑,我揣著相機(jī)與錄音,去河邊找鬼厢塘。 笑死茶没,一個(gè)胖子當(dāng)著我的面吹牛肌幽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抓半,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喂急,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了笛求?” 一聲冷哼從身側(cè)響起廊移,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎探入,沒(méi)想到半個(gè)月后狡孔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜂嗽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年苗膝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片植旧。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辱揭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隆嗅,到底是詐尸還是另有隱情界阁,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布胖喳,位于F島的核電站泡躯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丽焊。R本人自食惡果不足惜较剃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望技健。 院中可真熱鬧写穴,春花似錦、人聲如沸雌贱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欣孤。三九已至馋没,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間降传,已是汗流浹背篷朵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人声旺。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓笔链,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腮猖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴扫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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