利用js实现简单抽奖功能

2023-11-12

其实这种抽奖的功能和选人是一样的。在点击开始按钮之后,标题上方的名字可以实现一个不停的变化,在点击停止之后抽出获奖的名字。在写之我们必须明确一点的是需要用到哪些方法;并且将基础的框架搭建出来;

下面是功能实现的视频展示:(如下)

抽奖

基本的样式,这里就不作修改了。下面是功能实现的思路:

1.在html中写出基本框架:

分别是一个可以实现名字变化的标签,这里我写的是h2,当然你可以写成任何标签,都是可以的;

两个带有点击事件的按钮,一个是开始,一个是停止。当我点击开始按钮时能够触发事件,实现标题名字的不断变化,当我点击停止按钮时则可以选出一个获奖的名字。

3个奖项的标签和3个用以存放我们上面点击停止之后得到的值的标签,这里我用了p标签,同上。

    <div id="game">
        <h2>获奖的游戏?</h2>
    </div>
    <div class="btn">
        <input type="button" value="开始" id="startBtn">
        <input type="button" value="停止" id="stopBtn" disabled>
    </div>
    <div class="week">
        <div class="winner">
            <h1>一等奖</h1>
            <p>1</p>
        </div>
        <div class="winner">
            <h1>二等奖</h1>
            <p>2</p>
        </div>
        <div class="winner">
            <h1>三等奖</h1>
            <p>3</p>
        </div>
    </div>

这里写了不同的选择器用来区分不同的区域,实现不同的功能。

2.下面是js部分的代码,我这里用的内嵌,所以是写在body里面的

    <script>
        let nameStr = `LOL,Apex,魔兽,原神,王者,古墓丽影,云顶之弈`;
        let arrLucky = ["一等奖", "二等奖", "三等奖"];
        let arrId = nameStr.split(","); // 转数组

        let p = document.querySelectorAll('p');
        let timer = null, index = -1;

        // 点击事件
        // 开始
        startBtn.onclick = function () {
            stopBtn.disabled = false;
            if (timer) {
                return;
            }
            timer = setInterval(function () {
                index = random(0, arrId.length - 1);
                let h2s = document.getElementsByTagName(`h2`)[0];
                h2s.innerText = arrId[index];

            }, 100);
        }
        let i = 2;
        // 结束
        stopBtn.onclick = function () {
            clearInterval(timer);
            timer = null;   // 重新赋值

            if (i >= 0) {
                p[i].innerText = arrId[index];
                i--;
            }
            if (i < 0) {
                stopBtn.disabled = true;
            }
        }


        // 随机数
        function random(min, max) {
            return parseInt(Math.random() * (max + 1 - min) + min);
        }

    </script>

这里使用了一个数组的方法 split();来将字符串转为数组,这里可以根据自身的事实际需求书写,直接写成数组的形式也是可以的。

因为我们这里设置了三个获奖的游戏,是用p标签来表示的,要想在js中使用到具体的某个标签,我们需要先获取到该标签,所以使用了方法 document.querySelectorAll(ele'); 来获取到p标签,注意,使用该方法是存在返回值的,所以这里我使用了一个变量p来接收,而返回的值是一个 Nodelist 对象。

然后是点击事件,通过计时器来设置名字变化的好处是你可以通过修改特定的值就可以简单实现修改名字变化的快慢。即setInterval(function () {...}, 100); 中的100。你可以通过修改此参数来实现效果。

当我们点击开始按钮时,将停止按钮的关闭状态设置成false,即stopBtn.disabled = false;即可在我们点击了开始按钮之后,使停止按钮处于可选中状态。当我们并没有点击开始按钮时,停止按钮是处于一个不可选中的状态的,即disabled。

计时器的使用方法在这里就不过赘述,由于作用域的原因,停止按钮和开始按钮都是处于一个互不影响的状态,在我们停止按钮中书写的代码是无法访问到开始按钮中的数据的,这个时候就要将自己可能用到的数据,作为全局变量赋值出去,这样停止按钮作用域中也可以使用啦。

停止按钮的功能是在我们点击了停止按钮之后要实现一个名字变化的停止,所以这里使用了clearInterval(timer);来实现,但由于我们书写的功能不单是只实现一次的抽奖,是要实现多次的抽奖,所以,这里又要将timer赋值成null,这样才能是开始按钮处于工作状态。i的值就是你要抽奖的次数。

好了以上就是本次分享的全部内容,如有疑问可以在下面的评论区给我留言

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用js实现简单抽奖功能 的相关文章

随机推荐

  • javascript跳转到新页面的三种方法

    1 a标签 a标签 a href http www jb51 net title 脚本之家 Welcome a a href 上一个页面 就是前一个页面 a href 下一个页面 就是后一个页面 a href http www jb51 n
  • 虚拟DOM详细说明

    一 什么是虚拟DOM 虚拟DOM是对真实DOM的抽象 虚拟DOM树是根据真实的DOM树模仿出来的 两者都是节点相同的同一种树形数据结构 一个应用页面一般是由多个元素节点组合嵌套构成的基本骨架 其中某一个节点变化改变都可能会导致连锁反应 如果
  • Android完全退出应用程序 ,太爽了

    return instance 退出栈顶Activity public void popActivity Activity activity if activity null 在从自定义集合中取出当前Activity时 也进行了Activi
  • 多线程测试(一)

    编写一个ThreadTest类 分别通过继承Thread类和实现Runnable接口 两种方式实现两个线程 两个线程执行的任务是实现同一个变量 count 的累加操作 count从1增加到10 每增加1 在控制台输出 执行累加操作的线程的线
  • epoll_create和epoll_create1

    名字 epoll create epoll create1 创建epoll文件描述符 摘要 include
  • 计算机体系结构基础知识介绍之简单回顾原码反码补码

    原码 最高位为符号位 0表示正数 1表示负数 例如 X 0b11 3 四比特表示原码 0011 3 X 0b11 3 四比特表示原码 1011 11 反码 最高位为符号位 0表示正数 1表示负数 正数的反码等于本身 负数的反码除符号位外 各
  • 蓝桥杯 分数

    1 1 1 2 1 4 1 8 1 16 每项是前一项的一半 如果一共有20项 求这个和是多少 结果用分数表示出来 类似 3 2 当然 这只是加了前2项而已 分子分母要求互质 程序说明 可以用等比数列的前n项和公式 也可以直接模拟来做 答案
  • tp5循环插入百万数据模块不存在:error

    话不多说 直接进正题 今天清洗数据过程中 发现每次插入到700多条就会出现这个错误 刚开始以为是请求时间有限制 修改了apipost的请求时间也不行 修改了apache的最大请求时间还是不行 1 修改php最大运行时间 修改php ini文
  • Redis分布式锁----乐观锁的实现,以秒杀系统为例

    摘要 本文使用redis来实现乐观锁 并以秒杀系统为实例来讲解整个过程 本文源码请在这里下载 https github com appleappleapple DistributeLearning 乐观锁 大多数是基于数据版本 versio
  • 微信小程序实现跳转到另外一个小程序的方法

    微信小程序实现跳转到另外一个小程序的方法 1 首先需要在当前小程序app json中定义 需要跳转的小程序的app id app josn navigateToMiniProgramAppIdList appid 第一种方法 wx navi
  • teamviewer quicksupport 插件(下载)

    teamviewer是一款远程控制软件 免费 比较好的 teamviewer quicksupport是一款支持手机可以被远程控制软件 需要下载插件 有对应手机品牌的插件 例如有HUAWEI LG等 电脑下载 teamviewer quic
  • 基于图像深度学习的无线电信号识别

    利用图像深度学习解决无线电信号识别问题的技术思路 首先把无线电信号具象化为一张二维图片 将无线电信号识别问题转化为图像识别领域的目标检测问题 进而充分利用人工智能在图像识别领域的先进成果 提高无线电信号识别的智能化水平和复杂电磁环境下的识别
  • C++的函数重载详解

    函数名相同 提高函数复用性 同一个作用域 下 函数名相同 参数的个数或类型或顺序不同 都可以作函数重载 注意 返回值类型不同不能作为函数重载 两个特殊情况 1 函数重载遇上引用与常量引用 void func int a void func
  • #pragma once和#ifndef的作用和区别

    两者共同的作用 防止库文件重复包含 ifndef define endif 方法一 在 h头文件开头加上 pragma once add h pragma once int ADD x y 方法二 在 h头文件加上预定义指令 add h i
  • Python-Anaconda最新安装图文教程

    Anaconda简介 Anaconda是一种数据科学和机器学习的开发环境 它包含了大量的Python包 工具和库 以及可视化界面和集成开发环境 Anaconda可以方便地管理Python环境和安装第三方软件包 同时也支持多个操作系统和平台
  • vue 组件通信方式你知道几种,这6种一定得掌握

    第一种props 适用于的场景 父子组件通信 注意事项 如果父组件给子组件传递数据 函数 本质其实是子组件给父组件传递数据 如果父组件给子组件传递的数据 非函数 本质就是父组件给子组件传递数据 书写方式 3种 todos type Arra
  • PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码

    Precision Time Protocol PTP 一 什么是PTP PTP 是一种高精度时间同步协议 可以到达亚微秒级精度 有资料说可达到30纳秒左右的偏差精度 但需要网络的节点 交换机 支持PTP协议 才能实现纳秒量级的同步 一般在
  • 深入浅出 redux中间件

    redux中间件是什么 理解redux中间件首先我们需要理解redux是什么 Redux是JavaScript应 的状态容器 它保证程序 为 致性且易于测试 当业务足够复杂时 我们就需要使用redux来存储我们的多页面共同数据 redux的
  • 现行安全存储策略-密码加盐

    本文描述了本人 对于数据库中如何保存密码的认识过程 从最简单的明文保存到密码加盐保存 下面与大家分享下 第一阶段 最开始接触web开发时 对于用户表的密码基本是明文保存 如 username password zp1996 123456 z
  • 利用js实现简单抽奖功能

    其实这种抽奖的功能和选人是一样的 在点击开始按钮之后 标题上方的名字可以实现一个不停的变化 在点击停止之后抽出获奖的名字 在写之我们必须明确一点的是需要用到哪些方法 并且将基础的框架搭建出来 下面是功能实现的视频展示 如下 抽奖 基本的样式