基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件
基礎(chǔ)頁面結(jié)構(gòu)
import React, { useEffect, useState } from "react" import './index.css' const FlopLuckyDraw9 = () => { return ( <> <div className="title"> 可抽獎 <label >{count}</label> 次 </div> <div className="box"> { list.map((item) => { return ( <div className="item" key={item.id}> <div className={`style1`}>抽獎</div> <div className={`style2`}>{item.name}</div> </div> ) }) } </div> </> ) } export default FlopLuckyDraw9
初始化數(shù)據(jù)
import React, { useEffect, useState } from "react" import './index.css' const data = [ { id: 1, name: '1元優(yōu)惠券' }, { id: 2, name: '10元優(yōu)惠券', }, { id: 3, name: '謝謝惠顧' }, { id: 4, name: '豪華電動車' }, { id: 5, name: '1w購物券' }, { id: 6, name: '5w購物券' }, { id: 7, name: '豪華轎車' }, { id: 8, name: '房子一套' }, { id: 9, name: '頂配筆記本' } ] const FlopLuckyDraw9 = () => { const [count, setCount] = useState(3) const [list, setList] = useState([]) useEffect(() => { setList(data.map((i) => { return { ...i, showName: false, showResult: false } })) }, []) return ( <></> ) } export default FlopLuckyDraw9
翻轉(zhuǎn)邏輯
點擊 item 時,將 showName 變?yōu)?true,改變類名,實現(xiàn)翻轉(zhuǎn)效果。
const FlopLuckyDraw9 = () => { const handleClick = (item) => { setList(list.map((i) => { if (i.id === item.id) { return { ...i, showName: true, } } else { return i } })) } return ( <> <div className="box"> { list.map((item) => { return ( <div className="item" onClick={() => handleClick(item)} key={item.id}> <div className={`style1 ${item.showName ? 'hide' : null}`}>抽獎</div> <div className={`style2 ${item.showName ? 'show' : null}`}>{item.name}</div> </div> ) }) } </div> </> ) } export default FlopLuckyDraw9
count 為 0
當(dāng) count 為 0 時,將所有的牌全部都翻轉(zhuǎn)出來,同時添加未選中的類名。
const FlopLuckyDraw9 = () => { const [count, setCount] = useState(3) useEffect(() => { setTimeout(() => { // 監(jiān)聽 count if (count === 0) { setList(list.map((i) => { if (!i.showName) { return { ...i, showName: true, showResult: true } } else { return { ...i, showName: true, } } })) } }, 1000); }, [count]) const handleClick = (item) => { if (count === 0) { return; } // .... setCount(count => count - 1) } return ( <> <div className="title"> 可抽獎 <label >{count}</label> 次 </div> <div className="box"> { list.map((item) => { return ( <div> <div className={`style2 ${item.showName ? 'show' : null} ${item.showResult ? 'show-result' : null}`}>{item.name}</div> </div> ) }) } </div> </> ) } export default FlopLuckyDraw9
100% 中獎
100% 中獎?代碼是自己的,改吧改吧就可以了。
const data = [ { id: 1, name: '1元優(yōu)惠券', is: true }, { id: 2, name: '10元優(yōu)惠券', }, { id: 3, name: '謝謝惠顧', is: true }, { id: 4, name: '豪華電動車' }, { id: 5, name: '1w購物券' }, { id: 6, name: '5w購物券' }, { id: 7, name: '豪華轎車' }, { id: 8, name: '房子一套', is: true }, { id: 9, name: '頂配筆記本' } ].sort(v => Math.random() - 0.5) const FlopLuckyDraw9 = () => { const [winAPrize, setWinAPrize] = useState([]) const handleClick = (item) => { // ... const winAPrizeItem = winAPrize.pop() setList(list.map((i) => { if (i.id === item.id) { return { ...i, showName: true, name: winAPrizeItem.name } } else { return i } })) // ... } useEffect(() => { setWinAPrize(data.filter(v => v.is)) }, []) return ( <></> ) } export default FlopLuckyDraw9
效果圖
以上就是基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件的詳細內(nèi)容,更多關(guān)于React.js九宮格翻牌抽獎的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決React報錯Cannot assign to 'current'
這篇文章主要為大家介紹了React報錯Cannot assign to 'current' because it is a read-only property的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12react.js組件實現(xiàn)拖拽復(fù)制和可排序的示例代碼
這篇文章主要介紹了react.js組件實現(xiàn)拖拽復(fù)制和可排序的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08React中useTransition鉤子函數(shù)的使用詳解
React?18的推出標(biāo)志著React并發(fā)特性的正式到來,其中useTransition鉤子函數(shù)是一個重要的新增功能,下面我們就來學(xué)習(xí)一下useTransition鉤子函數(shù)的具體使用吧2024-02-02react-json-editor-ajrm解析錯誤與解決方案
由于歷史原因,項目中 JSON 編輯器使用的是 react-json-editor-ajrm,近期遇到一個嚴重的展示錯誤,傳入編輯器的數(shù)據(jù)與展示的不一致,這是產(chǎn)品和用戶不可接受的,本文給大家介紹了react-json-editor-ajrm解析錯誤與解決方案,需要的朋友可以參考下2024-06-06利用React-router+Webpack快速構(gòu)建react程序
目前 React、Webpack 等技術(shù)如火如荼,你是不是還在愁苦如何把這些雜亂的知識怎么學(xué)習(xí)一下,開啟一段新的前端開發(fā)之路呢?那么這篇將給大家運用示例代碼詳細的介紹使用React-router和Webpack如何快速構(gòu)建一個react程序,感興趣的朋友們下面來一起看看吧。2016-10-10