用JS简单实现九宫格抽奖的示例代码

 更新时间:2023年12月21日 08:32:35   作者:sherlockkid7  
在网上经常看见一些抽奖页面,也玩过不同类型的抽奖活动,但是一直没有做过抽奖的功能,所以今天来实现一个简单的九宫格抽奖功能,文中有详细的代码示例供大家参考,感兴趣的朋友可以自己动手尝试一下

效果展示

页面布局

九宫格抽奖的布局基本是由九个方块组成,一般有中间是一个开始抽奖按钮,四周的方块是不同的奖项;也有像掘金这样的九个都是奖项,下面再加个抽奖按钮;这里实现的是第一种类型

页面主要包含一个标题和转盘,转盘包含8个奖品子元素和一个开始抽奖按钮,使用flex布局,排列元素。

8个奖品子元素自定义了一个属性data-order,表示开始抽奖的时候顺时针方向上当前自己位置的索引

具体实现

1. 定义奖品数组prize_list

模拟出8个不同的奖品数据。循环奖品数组,将对应位置的奖品展示到页面

获取所有的奖品元素,前三个奖品数据直接展示到对应索引的奖品元素,后面的需要根据自定义属性data-order指定当前数据展示在哪个位置(顺时针方向指定位置)

2. 创建函数runCircle()

用于移除当前奖品元素的选中样式,同时自增当前奖品的索引值,再加上选中样式。当奖品索引值大于7时,奖品索引值需要变成0

3. 创建抽奖函数controll(),处理转盘抽奖的运行逻辑

在该函数中自增抽奖转动次数,然后调用 runCircle 函数来改变当前选中的奖品奖项。如果抽奖的次数超过了 minimum_jumps + 10 并且当前选中的奖项就是奖品,那么就会停止抽奖,并在页面上显示一个消息,告诉用户获得了哪个奖品。否则,就根据抽奖的次数来改变转盘转动的速度。

当抽奖转动次数等于抽奖开始的最小抽奖次数时,奖品的结果值prizeId在0-8 的数值中随机取得,決定出奖品的位置

const total_items = 8 //奖品的总数
let prizeId = -1 // 奖品的结果,初始值为-1,表示还没有开始抽奖
let current_index = -1 //当前选中奖项索引
const minimum_jumps = 30 // 超过该数字进入抽奖
let jumps = 0 //抽奖转动次数,初始值为0
let speed = 100  //转动速度
let timer = 0   
let disabled = false
// 奖品抽奖
function controll() {
  jumps += 1
  runCircle()
  // 抽到奖品停止游戏
  if (jumps > minimum_jumps + 10 && prizeId === current_index) {
    clearTimeout(timer)
    disabled = false
    const message = document.createElement('p')
    message.className = 'message'
    message.innerHTML = `恭喜你获得:${prize_list[current_index].name}!`
    container.appendChild(message)
    prizeId = -1
    jumps = 0
  } else {
      // 加快
    if (jumps < minimum_jumps) {
      speed -= 5
      // 決定奖品的位置
    } else if (jumps === minimum_jumps) {
      prizeId = generatePrizeNumber()
    } else {
      // 下一个就是奖品时放慢速度
      if ((jumps > minimum_jumps + 10) && prizeId === (current_index + 1)) {
        speed += 600
      } else {
        speed += 20 // 減速
      }
    }
    if (speed < 40) {
      speed = 40
    }
    timer = setTimeout(controll, speed)
  }
}
function init() {
  jumps = 0
  speed = 100
  prizeId = -1
  controll()
}

4. 添加开始抽奖按钮的点击事件,执行抽奖函数开始抽奖

在已经抽奖的情况下,改变disabled变量为真,防止重复执行抽奖

根据以上步骤就可以实现一个简单的九宫格抽奖了

到此这篇关于用JS简单实现九宫格抽奖的示例代码的文章就介绍到这了,更多相关JS实现九宫格抽奖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js仿微博动态栏功能

    js仿微博动态栏功能

    本文主要介绍了js仿微博动态栏功能的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 深入理解MVC中的时间js格式化

    深入理解MVC中的时间js格式化

    下面小编就为大家带来一篇深入理解MVC中的时间js格式化。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • js下通过getList函数实现分页效果的代码

    js下通过getList函数实现分页效果的代码

    js下通过getList函数实现分页效果的代码,需要通过js分页的朋友可以参考下。
    2010-09-09
  • JS选项卡动态替换banner图片路径的方法

    JS选项卡动态替换banner图片路径的方法

    这篇文章主要介绍了JS选项卡动态替换banner图片路径的方法,涉及javascript操作文件css样式的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • 使用20行JS代码实现屏幕录制功能

    使用20行JS代码实现屏幕录制功能

    在开发中可能有遇到过屏幕录制的需求,无论是教学、演示还是游戏录制,都需要通过屏幕录制来记录和分享内容,MediaRecorder 是一种强大的技术,可以在浏览器端实现屏幕录制功能,本文将介绍如何使用JS MediaRecorder 实现屏幕录制,需要的朋友可以参考下
    2023-11-11
  • jquery和js显示和隐藏div的几种方法对比整理

    jquery和js显示和隐藏div的几种方法对比整理

    jQuery是基于JavaScript的一种框架。jQuery封装js和Ajax的功能,提供函数接口,简化js的操作。使用jquery来显示或者隐藏div真的很方便。
    2023-02-02
  • JavaScript实现解析INI文件内容的方法

    JavaScript实现解析INI文件内容的方法

    这篇文章主要介绍了JavaScript实现解析INI文件内容的方法,结合实例形式分析了javascript通过自定义函数实现针对ini文件解析操作的相关处理技巧,需要的朋友可以参考下
    2016-11-11
  • async/await实现Promise.acll()简介

    async/await实现Promise.acll()简介

    Promise.all() 方法接收一个 promise 的 iterable 类型的输入,并且只返回一个Promise实例,并且输入的所有 promise 的 resolve 回调的结果是一个数组,这篇文章主要介绍了async/await实现Promise.acll()简介,需要的朋友可以参考下
    2022-11-11
  • javascript中CheckBox全选终极方案

    javascript中CheckBox全选终极方案

    在javascript页面中实现CheckBox或者Radio的选中状态是一件很容易的事情,下面我们来给大家展示下在asp.net中使用javascript中CheckBox全选终极方案,有需要的小伙伴可以参考下。
    2015-05-05
  • html+javascript+bootstrap实现层级多选框全层全选和多选功能

    html+javascript+bootstrap实现层级多选框全层全选和多选功能

    想做一个先按层级排序并可以多选的功能,首先倾向于用多层标签式的,直接选定加在文本域里,接下来通过本文给大家介绍html+javascript+bootstrap实现层级多选框全层全选和多选功能,需要的朋友参考下
    2017-03-03

最新评论