基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件
更新時間:2023年01月12日 17:11:49 作者:鹿魚
這篇文章主要為大家詳細(xì)介紹了如何基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
基礎(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 FlopLuckyDraw9count 為 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)兔兔牌九宮格翻牌抽獎組件的詳細(xì)內(nèi)容,更多關(guān)于React.js九宮格翻牌抽獎的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TS裝飾器bindThis優(yōu)雅實現(xiàn)React類組件中this綁定
這篇文章主要為大家介紹了TS裝飾器bindThis優(yōu)雅實現(xiàn)React類組件中this綁定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
react-router-dom入門使用教程(前端路由原理)
這篇文章主要介紹了react-router-dom入門使用教程,主要包括react路由相關(guān)理解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
ReactNative錯誤采集原理在Android中實現(xiàn)詳解
這篇文章主要為大家介紹了ReactNative錯誤采集原理在Android中實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

