广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >基于React.js实现兔兔牌九宫格翻牌抽奖组件
  • 406
分享到

基于React.js实现兔兔牌九宫格翻牌抽奖组件

React.js九宫格翻牌抽奖React.js九宫格React.js抽奖 2023-01-12 18:01:20 406人浏览 泡泡鱼
摘要

目录基础页面结构初始化数据翻转逻辑count 为 0100% 中奖效果图基础页面结构 import React, { useEffect, useState } from "reac

基础页面结构

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

初始化数据

import React, { useEffect, useState } from "react"
import './index.css'

const data = [
  { id: 1, name: '1元优惠券' },
  { id: 2, name: '10元优惠券', },
  { 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

翻转逻辑

点击 item 时,将 showName 变为 true,改变类名,实现翻转效果。

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

当 count 为 0 时,将所有的牌全部都翻转出来,同时添加未选中的类名。

const FlopLuckyDraw9 = () => {
  const [count, setCount] = useState(3)

  useEffect(() => {
    setTimeout(() => {
      // 监听 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元优惠券', is: true },
  { id: 2, name: '10元优惠券', },
  { 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实现兔兔牌九宫格翻牌抽奖组件的详细内容,更多关于React.js九宫格翻牌抽奖的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于React.js实现兔兔牌九宫格翻牌抽奖组件

本文链接: https://www.lsjlt.com/news/177586.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作