国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

VUE實現大轉盤抽獎

瀏覽:2日期:2022-09-29 17:06:31
目錄UI初始參考各值參考圖方案分析-參數配置核心思路:關于旋轉位置參數配置實現邏輯組件使用抽獎效果結語UI

老規矩,先看下靜態UI,以便于有個圖像概念

VUE實現大轉盤抽獎

初始參考各值參考圖

VUE實現大轉盤抽獎

方案分析-參數配置核心思路:

將指針和中獎區域劃分兩部分,目前常規的效果,控制中獎區域旋轉,然后停在指針處,當然控制指針也可以,一套思路,dom結構也比較簡單,唯一算是復雜點的就是中獎區域,但是如果你足夠懶,像我一樣,你可以傳遞一張圖也可以,完全依賴遠端數據;

關于旋轉位置

每個移動位置應均分,360/個數 === 每個獎品所占據的位置,以本文為例8個獎品位置,每個區域應為45deg,每個指針中心位置應為±22.5deg(±的意思看你是順時針還是逆時針)具體值看下面 實現邏輯 區域

參數配置 data 給與組件一些系統參數 旋轉的圈數、效果等等配置 計算屬性 rotateStyle 旋轉角度,實時調整 props 提供組件內部接口的參數和一些核心數據,比如轉盤的圖片等等

// 基礎參數data () { return { isrun: false, rotateAngle: 0, // 旋轉角度 config: { duration: 4000, // 總旋轉時間 ms級 circle: 8, // 旋轉圈數 mode: ’ease-in-out’ // 由快到慢 慣性效果都省了 }, cricleAdd: 1, // 第幾次抽獎 drawIndex: 0 // 中獎索引 轉盤圖片排序 指針右手開始 0-... } } // 計算屬性 computed: { rotateStyle () { const _c = this.config return ` -webkit-transition: transform ${_c.duration}ms ${_c.mode}; transition: transform ${_c.duration}ms ${_c.mode}; -webkit-transform: rotate(${this.rotateAngle}deg); transform: rotate(${this.rotateAngle}deg);` } } // 入參 props: { httpData: {}, // 接口調用所需參數 stateData: { type: Object, default: () => { return { coin: 0, // 超級幣數量 prize_img: ’’ // 轉盤圖片 } } } }實現邏輯 咱們要做的事情很簡單,計算出中獎獎品的位置,輸出即可 位置即對應圈數,drawIndex對應獎品位置,這個參數里面說過了

this.rotateAngle = this.config.circle * 360 * this.cricleAdd - (22.5 + this.drawIndex * 45)// 圈數位置解析// this.config.circle * 360 * this.cricleAdd 順時針總圈數/累積總圈數// 22.5 + this.drawIndex * 45 ===> (獎品位置 === this.drawIndex * 45) (指針中間位置 === 22.5) drawIndex,直接從服務端拿就行了,如果沒有跑出位置,自己可以計算一下 為了方便拓展,拋出了兩個狀態對應抽獎的開始于完成,start和fin

this.$emit(’draw_fin’, ’start’)this.$emit(’draw_fin’, ’fin’) 完整代碼,css就不水字數了,下面附上源碼地址

methods: { async run () {if (this.stateData.coin < 10) { console.log(’超級幣不足’) return} if (this.isrun) return// const data = await this.goDraw()// 可以作為彈窗等信息展示this.$emit(’draw_fin’, ’start’)this.$set(this.stateData, ’coin’, 0) // 更新數據,此處僅為示例,推薦使用 draw_fin方法的 start/fin 進行相應數據更新this.isrun = truethis.rotateAngle = this.config.circle * 360 * this.cricleAdd - (22.5 + this.drawIndex * 45)// 圈數位置解析// this.config.circle * 360 * this.cricleAdd 順時針總圈數/累積總圈數// 22.5 + this.drawIndex * 45 ===> (獎品位置 === this.drawIndex * 45) (指針中間位置 === 22.5) this.cricleAdd++ setTimeout(() => { this.$emit(’draw_fin’, ’fin’) this.isrun = false }, this.config.duration) }, goDraw () { // 請求接口拿到中獎商品 // 加下自己項目的樣式 loading 用戶體驗 return new Promise(async (resolve, reject) => { // await 獎品接口 resolve({msg: ’抽獎明細’ }) }) }組件使用

使用

import dialWrap from ’../../components/dial/dial.vue’<dialWrap ref='dialWrap' :stateData='stateData'></dialWrap>抽獎效果

VUE實現大轉盤抽獎

結語

以上就是大概的實現思路了,比較簡單的效果;再細的一些東西以及拓展,大家可以自行發揮哈~

另附本文-源碼地址,歡迎探討哈~

以上就是VUE實現大轉盤抽獎的詳細內容,更多關于vue 大轉盤抽獎的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 久久精品国内一区二区三区 | 亚洲欧美在线一区二区 | 亚洲精品99久久久久中文字幕 | 99视频精品 | 91精品免费国产高清在线 | 成人男男黄网色视频免费 | 亚洲性网| 未成人做爰视频www 窝窝午夜精品一区二区 | 久草视频资源在线 | 久久国产精品久久国产片 | 九草在线 | 国产成人教育视频在线观看 | 男人精品一线视频在线观看 | 欧美日韩中文字幕在线观看 | 亚洲三级在线播放 | 欧美成人观看 | 久久精品视频91 | 亚洲 欧美 国产 日韩 制服 bt | 日本成人免费在线视频 | 精品午夜一区二区三区在线观看 | 欧美精品在线视频观看 | 欧美亚洲在线观看 | 在线视频 亚洲 | 手机在线成人精品视频网 | 久久久一本精品99久久精品66 | 欧美一级毛片欧美毛片视频 | 欧美第一页草草影院浮力 | 欧美13一14周岁a在线播放 | 精品视频一区在线观看 | 亚洲精品午夜在线观看 | 亚洲国产片 | 九九精品免费观看在线 | 在线观看 国产 | 在线观看视频中文字幕 | 久久久9999久久精品小说 | 国产精品爱久久久久久久 | 欧美在线日韩在线 | 精品伊人久久久久网站 | 免费特黄一级欧美大片在线看 | 成人黄色毛片 | 国产成人ay手机在线观看 |