锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JS九宫格抽奖

JS九宫格抽奖

0
  • 软件开发
  • 发布于 2024-09-26
  • 0 次阅读
黄健
黄健

制作九宫格抽奖是一个很有意思的过程,废话不多说,直接上代码,看看你能抽到什么。

html部分

<body>
        <div id="all">
            <div class="one">M4A1-雷神</div>
            <div class="two" style="font-size: 12px;">SCAR Light-白虎</div>
            <div class="three">M200-幻神</div>
            <div class="four" style="font-size: 14px;">大礼包(一折)</div>
            <div class="five">98K-星神</div>
            <div class="six">谢谢惠顾</div>
            <div class="seven">王者-葵</div>
            <div class="eight">再来一次</div>
            <button id="button">开始抽奖</button>
        </div>
</body>

css部分

<style>
            #all {
                width: 360px;
                height: 360px;
                margin: auto;
                position: relative;
                text-align: center;
                line-height: 100px;
            }

            .one {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 10px;
                top: 10px;
            }

            .two {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 120px;
                top: 10px;
            }

            .three {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 230px;
                top: 10px;
            }

            .four {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 230px;
                top: 120px;
            }

            .five {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 230px;
                top: 230px;
            }

            .six {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 120px;
                top: 230px;
            }

            .seven {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 10px;
                top: 230px;
            }

            .eight {
                background-color: aquamarine;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 10px;
                top: 120px;
            }

            #button {
                display: block;
                background-color: cadetblue;
                width: 100px;
                height: 100px;
                position: absolute;
                left: 120px;
                top: 120px;
                cursor: pointer;
            }
        </style>

js部分

<script>
        let button = document.getElementById('button');//获取按钮
        let all = document.getElementById('all'); //获取所有盒子
        let prize = all.getElementsByTagName('div');//获取奖品
        console.log(prize);
        let i = 0;//声明一个变量 对应奖品
        let speed = 0;//声明一个变量对应圈数
        let time = 300;//声明时间变量
        let inter;// 声明一个变量,把定时器赋给这个变量
        let num;//声明一个变量,获得一个随机数组
        button.onclick = asb; //给转动函数赋一个名字,为了不能重复点击
        //点击
        function asb() {
            prize[i].style.background = 'blue';
            inter = setInterval(rotates, time);
            num = Math.floor(Math.random() * prize.length);
            console.log(num);
            button.onclick = null;
        }
        //转动颜色变化
        function rotates() {
            if (i < prize.length - 1) {
                i++;
                prize[i].style.backgroundColor = 'blue';
                prize[i - 1].style.backgroundColor = 'aquamarine';
            } else {
                i = 0;
                prize[i].style.backgroundColor = 'blue';
                prize[prize.length - 1].style.backgroundColor = 'aquamarine';
                speed++;
            }
            //速度变化设置
            if (speed < 2) {
                time -= 20;
                if (time < 100) {
                    time = 100;
                }
            } else if (speed > 4) {
                time += 50;
                if (time > 500) {
                    time = 500;
                }
            }
            //判定停止
            if (i == num && speed > 7) {
                clearInterval(inter);
                //设置一次性定时器,用来设置弹窗和恢复数据
                setTimeout(function() {
                    alert("恭喜您获得" + prize[i].innerHTML);
                    //重置数据
                    prize[i].style.backgroundColor = 'aquamarine';
                    i = 0;
                    time = 100;
                    speed = 0;
                    num = 0;
                    button.onclick = asb;
                }, 400)
            } else {
                //重置定时器
                clearInterval(inter);
                inter = setInterval(rotates, time);
            }
        }
    </script>

ヾ( ̄▽ ̄)Bye\~Bye\~

原文链接: https://blog.csdn.net/hexadecimal_001/article/details/137832535

标签: #JavaScript 80
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.