在小程序中實(shí)現(xiàn)類似天貓抽獎(jiǎng)的大轉(zhuǎn)盤(pán)和跑馬燈的效果

在我們做電商的主題活動(dòng)的時(shí)候英岭,經(jīng)常用到跑馬燈來(lái)吸引眼球哟绊,并用大轉(zhuǎn)盤(pán)來(lái)實(shí)現(xiàn)抽獎(jiǎng)的效果。
如何在微信小程序開(kāi)發(fā)中也能實(shí)現(xiàn)這樣的效果呢门怪?具體請(qǐng)看下面的講解骡澈。

需要實(shí)現(xiàn)的功能
1.實(shí)現(xiàn)類似天貓超市抽獎(jiǎng)的大轉(zhuǎn)盤(pán)
2.再實(shí)現(xiàn)跑馬燈效果
3.點(diǎn)擊START,開(kāi)始抽獎(jiǎng)掷空,抽獎(jiǎng)完成后有彈窗

先看效果圖



<!--index.wxml--> 
<view class="container-out">  
  <view  
  class="circle" wx:for="{{circleList}}"  
  style="top:{{item.topCircle}}rpx;left:{{item.leftCircle}}rpx;background-color: {{(index%2==0)?colorCircleFirst:colorCircleSecond}};"></view>  
  <view class="container-in">  
    <view class="content-out" wx:for="{{awardList}}" style="top:{{item.topAward}}rpx;left:{{item.leftAward}}rpx;background-color: {{(index==indexSelect)?colorAwardSelect:colorAwardDefault}};">  
      <image class="award-image" src="{{item.imageAward}}"></image>  
    </view>  
    <view class="start-btn" bindtap="startGame" style=" background-color:{{isRunning?'#e7930a':'#ffe400'}}">START</view>  
  </view>  
</view>

下面是頁(yè)面的WXSS代碼:

/**index.wxss**/ 
   
.container-out {  
  height: 600rpx;  
  width: 650rpx;  
  background-color: #b136b9;  
  margin: 100rpx auto;  
  border-radius: 40rpx;  
  box-shadow: 0 10px 0 #871a8e;  
  position: relative;  
}  
   
.container-in {  
  width: 580rpx;  
  height: 530rpx;  
  background-color: #871a8e;  
  border-radius: 40rpx;  
  position: absolute;  
  left: 0;  
  right: 0;  
  top: 0;  
  bottom: 0;  
  margin: auto;  
}  
   
/**小圓球  
box-shadow: inset 3px 3px 3px #fff2af;*/ 
   
.circle {  
  position: absolute;  
  display: block;  
  border-radius: 50%;  
  height: 20rpx;  
  width: 20rpx;  
}  
   
.content-out {  
  position: absolute;  
  height: 150rpx;  
  width: 166.6666rpx;  
  background-color: #f5f0fc;  
  border-radius: 15rpx;  
  box-shadow: 0 5px 0 #d87fde;  
}  
   
/**居中 加粗*/ 
   
.start-btn {  
  position: absolute;  
  margin: auto;  
  top: 0;  
  left: 0;  
  bottom: 0;  
  right: 0;  
  border-radius: 15rpx;  
  height: 150rpx;  
  width: 166.6666rpx;  
  background-color: #ffe400;  
  box-shadow: 0 5px 0 #e7930a;  
  color: #f6251e;  
  text-align: center;  
  font-size: 55rpx;  
  font-weight: bolder;  
  line-height: 150rpx;  
}  
   
.award-image {  
  position: absolute;  
  margin: auto;  
  top: 0;  
  left: 0;  
  bottom: 0;  
  right: 0;  
  height: 140rpx;  
  width: 130rpx;  
}

下面是頁(yè)面的JS代碼:

//index.js  
//獲取應(yīng)用實(shí)例  
var app = getApp()  
Page({  
  data: {  
    circleList: [],//圓點(diǎn)數(shù)組  
    awardList: [],//獎(jiǎng)品數(shù)組  
    colorCircleFirst: '#FFDF2F',//圓點(diǎn)顏色1  
    colorCircleSecond: '#FE4D32',//圓點(diǎn)顏色2  
    colorAwardDefault: '#F5F0FC',//獎(jiǎng)品默認(rèn)顏色  
    colorAwardSelect: '#ffe400',//獎(jiǎng)品選中顏色  
    indexSelect: 0,//被選中的獎(jiǎng)品index  
    isRunning: false,//是否正在抽獎(jiǎng)  
    imageAward: [  
      '../../images/1.jpg',  
      '../../images/2.jpg',  
      '../../images/3.jpg',  
      '../../images/4.jpg',  
      '../../images/5.jpg',  
      '../../images/6.jpg',  
      '../../images/7.jpg',  
      '../../images/8.jpg',  
    ],//獎(jiǎng)品圖片數(shù)組  
  },  
   
  onLoad: function () {  
    var _this = this;  
    //圓點(diǎn)設(shè)置  
    var leftCircle = 7.5;  
    var topCircle = 7.5;  
    var circleList = [];  
    for (var i = 0; i < 24; i++) {  
      if (i == 0) {  
        topCircle = 15;  
        leftCircle = 15;  
      } else if (i < 6) {  
        topCircle = 7.5;  
        leftCircle = leftCircle + 102.5;  
      } else if (i == 6) {  
        topCircle = 15  
        leftCircle = 620;  
      } else if (i < 12) {  
        topCircle = topCircle + 94;  
        leftCircle = 620;  
      } else if (i == 12) {  
        topCircle = 565;  
        leftCircle = 620;  
      } else if (i < 18) {  
        topCircle = 570;  
        leftCircle = leftCircle - 102.5;  
      } else if (i == 18) {  
        topCircle = 565;  
        leftCircle = 15;  
      } else if (i < 24) {  
        topCircle = topCircle - 94;  
        leftCircle = 7.5;  
      } else {  
        return 
      }  
      circleList.push({ topCircle: topCircle, leftCircle: leftCircle });  
    }  
    this.setData({  
      circleList: circleList  
    })  
   
    //圓點(diǎn)閃爍  
    setInterval(function () {  
      if (_this.data.colorCircleFirst == '#FFDF2F') {  
        _this.setData({  
          colorCircleFirst: '#FE4D32',  
          colorCircleSecond: '#FFDF2F',  
        })  
      } else {  
        _this.setData({  
          colorCircleFirst: '#FFDF2F',  
          colorCircleSecond: '#FE4D32',  
        })  
      }  
    }, 500)//設(shè)置圓點(diǎn)閃爍的效果  
   
    //獎(jiǎng)品item設(shè)置  
    var awardList = [];  
    //間距,怎么順眼怎么設(shè)置吧.  
    var topAward = 25;  
    var leftAward = 25;  
    for (var j = 0; j < 8; j++) {  
      if (j == 0) {  
        topAward = 25;  
        leftAward = 25;  
      } else if (j < 3) {  
        topAward = topAward;  
        //166.6666是寬.15是間距.下同  
        leftAward = leftAward + 166.6666 + 15;  
      } else if (j < 5) {  
        leftAward = leftAward;  
        //150是高,15是間距,下同  
        topAward = topAward + 150 + 15;  
      } else if (j < 7) {  
        leftAward = leftAward - 166.6666 - 15;  
        topAward = topAward;  
      } else if (j < 8) {  
        leftAward = leftAward;  
        topAward = topAward - 150 - 15;  
      }  
      var imageAward = this.data.imageAward[j];  
      awardList.push({ topAward: topAward, leftAward: leftAward, imageAward: imageAward });  
    }  
    this.setData({  
      awardList: awardList  
    })  
  },  
   
  //開(kāi)始抽獎(jiǎng)  
  startGame: function () {  
    if (this.data.isRunning) return 
    this.setData({  
      isRunning: true 
    })  
    var _this = this;  
    var indexSelect = 0  
    var i = 0;  
    var timer = setInterval(function () {  
      indexSelect++;  
      //這里我只是簡(jiǎn)單粗暴用y=30*x+200函數(shù)做的處理.可根據(jù)自己的需求改變轉(zhuǎn)盤(pán)速度  
      i += 30;  
      if (i > 1000) {  
        //去除循環(huán)  
        clearInterval(timer)  
        //獲獎(jiǎng)提示  
   
        wx.showModal({  
          title: '恭喜您',  
          content: '獲得了第' + (_this.data.indexSelect + 1) + "個(gè)優(yōu)惠券",  
          showCancel: false,//去掉取消按鈕  
          success: function (res) {  
            if (res.confirm) {  
              _this.setData({  
                isRunning: false 
              })  
            }  
          }  
        })  
      }  
      indexSelect = indexSelect % 8;  
      _this.setData({  
        indexSelect: indexSelect  
      })  
    }, (200 + i))  
  }  
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肋殴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坦弟,更是在濱河造成了極大的恐慌护锤,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酿傍,死亡現(xiàn)場(chǎng)離奇詭異烙懦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拧粪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)修陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人可霎,你說(shuō)我怎么就攤上這事⊙缟保” “怎么了癣朗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)旺罢。 經(jīng)常有香客問(wèn)我旷余,道長(zhǎng),這世上最難降的妖魔是什么扁达? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任正卧,我火速辦了婚禮,結(jié)果婚禮上跪解,老公的妹妹穿的比我還像新娘炉旷。我一直安慰自己,他們只是感情好叉讥,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布窘行。 她就那樣靜靜地躺著,像睡著了一般图仓。 火紅的嫁衣襯著肌膚如雪罐盔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天救崔,我揣著相機(jī)與錄音惶看,去河邊找鬼捏顺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纬黎,可吹牛的內(nèi)容都是我干的幅骄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼莹桅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昌执!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起诈泼,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤懂拾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后铐达,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體岖赋,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年瓮孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唐断。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杭抠,死狀恐怖脸甘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偏灿,我是刑警寧澤丹诀,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站翁垂,受9級(jí)特大地震影響铆遭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沿猜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一枚荣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啼肩,春花似錦橄妆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至颁虐,卻和暖如春蛮原,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背另绩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工儒陨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留花嘶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓蹦漠,卻偏偏與公主長(zhǎng)得像椭员,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笛园,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,284評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,791評(píng)論 22 665
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)隘击、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評(píng)論 4 61
  • 春風(fēng)運(yùn)暖研铆,雨滴蘸潤(rùn)埋同,庭院深深花俏。窗前池岸錦芳連棵红,信步處凶赁,榮芬香繞。 蜂情似水逆甜,蝶心戀蕊虱肄,癡意柔情堪道。最憐那一角...
    靜鈴音閱讀 369評(píng)論 18 21
  • 第七章我印象最深的是給未來(lái)的自己寫(xiě)一封信交煞,當(dāng)時(shí)是開(kāi)營(yíng)初期我還真試著給自己寫(xiě)了一封信咏窿,剛才又回看了那封信,心中挺有感...
    田心遠(yuǎn)閱讀 361評(píng)論 2 2