iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >原生JS实现H5转盘游戏的示例代码
  • 234
分享到

原生JS实现H5转盘游戏的示例代码

2024-04-02 19:04:59 234人浏览 薄情痞子
摘要

目录1.基础的页面布局(index.html)1.1html布局1.2CSS布局(style.css)2.工具函数(用于调整概率)3.传参及接收值配置4.dom操作方法及具体逻辑处理

本文是真实的实战项目,可以直接拿去用 —— 转盘抽奖

可以自由调整概率,你也可以成为黑心商家

项目效果是这样滴:视频链接

1. 基础的页面布局(index.html)

这里不做过多解释了,就是一些页面布局

大家直接复制粘贴过去用就行(是不是很贴心~)

1.1 html布局

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta Http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="./css/style.css" rel="external nofollow" >
    <title>九宫格抽奖</title>
</head>

<body>
    <div class="container">
        <p>H5转盘抽奖(可自由设置概率)</p>
        <ul class="lottery">
            <li class="item lottery-item-0">华为手机</li>
            <li class="item lottery-item-1">iPhone 手机</li>
            <li class="item lottery-item-2">谢谢惠顾</li>
            <li class="item lottery-item-7">小熊抱枕</li>
            <li class="item start" οnclick="start(event)" data-able="1">开始</li>
            <li class="item lottery-item-3">小度音响</li>
            <li class="item lottery-item-6">电风扇</li>
            <li class="item lottery-item-5">格力冰箱</li>
            <li class="item lottery-item-4">小米手环</li>
        </ul>
    </div>
  </body>
</html>

1.2 css布局(style.css)

@charset "UTF-8";
html{
	height: 100%;
	font-size: 16px;
}
body{
    font-family:-apple-system-font, "Helvetica Neue", sans-serif;    
    -WEBkit-font-smoothing: subpixel-antialiased;
}
body, a, h1, h2, h3, h4, h5, h6, ul, li, dl, dt, article, section, div, p, header, footer, menu, input, img{
	margin: 0;
	padding: 0;
}
img{
    vertical-align: middle;
}
p, h1, h2, h3, h4, h5, h6,ul{
	-webkit-margin-before: 0;
    -webkit-margin-after: 0;
    -webkit-padding-start: 0;
    -moz-margin-before: 0;
    -moz-margin-after: 0;
    -moz-padding-start: 0;
    -moz-padding-end: 0;
}

.clearfix:after {
    content:""; 
    display: block; 
    clear:both;
}
  
li{
	list-style: none;
}
a{
	text-decoration: none;
}
input{
	-webkit-appearance: none;
}
input:focus{
    outline: none;
}

header{
    height: .88rem;
    border-bottom: 1px solid #ccc;
    background-color: #fff;
}
.header-back{
    width: .36rem;
    height: .36rem;
    float: left;
    margin-top: .27rem;
    margin-left: .28rem;
}
.header-title{
    float: left;
    font-weight: 600;
    width: 90%;
    font-size: .36rem;
    color: #333;
    text-align: center;
    line-height: .88rem;
}
.container{
    font-size: 24px;
    text-align: center;
    padding-top: 50px;
}
.lottery{
    font-size: .32rem;
    width: 6rem;
    height: 6rem;
    margin: .2rem auto;
    display: flex;
    display: -webkit-flex;
    flex-wrap: wrap;
    border: 1px solid #000;
}
.item{
    width: 2rem;
    height: 2rem;
    line-height: 2rem;
    color: orangered;
    font-weight: bold;
    text-align: center;
    border: 1px solid orangered;
    box-sizing: border-box;
    background-size: 100%;
}
.active{
    background: #ffe6cc;
}

button:focus{
    outline: none;
}
.lottery-item-0{
    background-image: url('../img/huawei.png');
}
.lottery-item-1{
    background-image: url('../img/iphone.jpg');
}
.lottery-item-4{
    background-image: url('../img/xiaomi.jpg');
}
.lottery-item-7{
    background-image: url('../img/xiaoxiong.jpg');
}
.lottery-item-3{
    background-image: url('../img/xiaodu.jpg');
}
.lottery-item-6{
    background-image: url('../img/dfs.jpg');
}
.lottery-item-5{
    background-image: url('../img/bingxiang.jpg');
}

2. 工具函数(用于调整概率)

  • 此工具函数传入一个二维数组,用于调整概率
  • 默认商品概率相同,调用的时候 randomNum() 时候不传参数即可
  • 也可以自由设置概率
function randomNum(arr){
    // 1. 容错处理
    arr = arr || [];
    // es6 Map对象: 键与值的集合 方便访问其键与值
    let m = new Map(arr);
    // 计算概率
    let probability = 0;
    // console.log(m.values())
    for (const i of m.values()) {
        probability += i;
    }
    
   if(probability > 1){
        // 给一个友好的提示
        alert("概率总和不能大于1,小学数学是体育老师教的???");
        return false;
   }

    // 剩下没有定义的各自能占多少概率。
    // size 返回映射中的元素数
    let remainProbability = (1 - probability) / (8 - m.size);
    console.log(remainProbability)
     // 生成随机值,跟i对应的概率比较,
     let res = 0, r = Math.random();
     for (let i = 0; i < 8; i++) {
         // 有就取值 没有就随机取
         m.has(i) ? res += m.get(i) : res += remainProbability;
        //  console.log("res= "+ res);
        //  console.log("r= "+ r);
         if (res > r) {
             return i;
         }
     }
}

3. 传参及接收值配置

     let step = 0, //计数器
         timeInterval = 2, //速度控制器
         final, //最终位置
         looperFun, // setTimeout的返回值
         prizeList = ['华为', 'iPhone X', '谢谢惠顾', '小度音响', '手环', '格力冰箱', '电风扇', '小熊抱枕'];
        // 开始游戏
        function start(e){
            if(e.target.dataset.able === "1"){
                // 随机0-7 
                // 设置抽奖概率 不传参的话这几个商品几率相等
                // let arr = [[0,0],[1,0.5],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]];
                // final = randomNum(arr);
                final = randomNum();	// 这里不传参 概率均等
                console.log(final);
                if(final === false){
                    console.log("出错了");
                    return false;
                }
                e.target.setAttribute('data-able', 0);
                looperFun = setTimeout(looper, 100);
            }else{
                console.log("什么垃圾玩意,点不了");
                return false;
            }
        }

传参的二维数组第一个值代表商品id,第二个值为分配的概率

// 设置抽奖概率 不传参的话这几个商品几率相等
// let arr = [[0,0],[1,0.5],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0]];

4. dom 操作方法及具体逻辑处理

// 获取元素
function $my(classes){
    return document.querySelector(classes);
}

// 旋转九宫格
function looper(){
    // 移除上一个被选中的样式
    $my(".active") && $my(".active").classList.remove("active");

    // 转了超过3圈后才能停止。
    if (step >= 24 + final) {
        $my('.lottery-item-' + final).classList.add('active');
        step = final;
        setTimeout(() => {
            $my('.start').setAttribute('data-able', 1);
            alert('恭喜你,抽中了' + prizeList[final]);
        }, 100);
        clearTimeout(looperFun);
        return;
    }
    //当前转圈到的位置。
    let index = step % 8;
    $my('.lottery-item-' + index).classList.add('active');
    step++;
    // 下次变色的时间。
    let duration;
    if (step >= (16 + final)) { //在剩余一圈时候开始减速
        timeInterval += 1;
    } else {
        if (timeInterval <= 2) {
            timeInterval = 2; //时间缩短不能太小。
        }
        // 越来越快
        timeInterval--;
    }
    duration = timeInterval * 50;
    looperFun = setTimeout(looper, duration);
}

5. FAQ(注意事项)

1.手机端和PC端都可以操作

2.商品图需要自己引入一下

3.注意引入路径问题

4.js文件可以只写一个(第三步和第四步放一起就行)

以上就是原生JS实现H5转盘游戏的示例代码的详细内容,更多关于JS转盘游戏的资料请关注编程网其它相关文章!

--结束END--

本文标题: 原生JS实现H5转盘游戏的示例代码

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

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

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

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

下载Word文档
猜你喜欢
  • 原生JS实现H5转盘游戏的示例代码
    目录1.基础的页面布局(index.html)1.1html布局1.2css布局(style.css)2.工具函数(用于调整概率)3.传参及接收值配置4.dom操作方法及具体逻辑处理...
    99+
    2024-04-02
  • HTML+JS实现猜拳游戏的示例代码
    目录效果图关于JS构建过程添加事件监听器函数 gameRules()函数 whoWon()效果图 游戏可以通过这个链接进入 关于JS构建过程 首先,我创建了一个对象,其中包含每种可...
    99+
    2024-04-02
  • JS+Canvas实现接球小游戏的示例代码
    目录写在最前git地址成果展示实现思路详细说明写在最后写在最前 看了canvas的动画系列,已经抑制不住内心的冲动想写个小游戏了,还是那个套路——多写写,你才...
    99+
    2024-04-02
  • 基于JS实现Flappy Bird游戏的示例代码
    前言 Flappy Bird 是一款无尽的游戏,玩家可以控制一只鸟。玩家必须保护小鸟免于与管道等障碍物相撞。每次小鸟通过管道时,分数都会增加一。当小鸟与管道碰撞或因重力而坠落时,游戏...
    99+
    2024-04-02
  • JS实现别踩白块游戏的示例代码
    目录实现思路核心代码HTML代码CSS代码JS代码实现思路 1、offsetTop,与style.top 2、我们看到的是白块在向下运动,其实不是,政治运动的是装着白块的盒子,白块...
    99+
    2024-04-02
  • Python实现生命游戏的示例代码(tkinter版)
    目录生命游戏(Game of Life)游戏概述生存定律图形结构代码实现运行界面使用简介后续改进生命游戏(Game of Life) 由剑桥大学约翰·何顿·...
    99+
    2024-04-02
  • JS实现飞机大战小游戏的示例代码
    小编给大家分享一下JS实现飞机大战小游戏的示例代码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!先制作好要做好的几步以及背景样式var canvas = document.getElement...
    99+
    2023-06-15
  • 非html5实现js版弹球游戏示例代码
    开始前的html页面  开始后的html游戏界面  html页面布局,即index.html文件源码如下: 复制代码 代码如下: <!DOCTYPE HTM...
    99+
    2022-11-15
    html5 js 弹球游戏
  • 原生JS实现拖拽排序的示例代码
    目录HTML中的拖拽事件(drag & drop)Coding完整代码说到拖拽,应用场景不可谓不多。无论是打开电脑还是手机,第一眼望去的界面都是可拖拽的,靠拖拽实现...
    99+
    2022-12-08
    JS实现拖拽排序 JS拖拽排序 JS 排序
  • 基于JS实现的消消乐游戏的示例代码
    目录前言游戏的准备工作总结一下棋盘渲染画面动画效果genCollapse()genDownfall()genEmerge()整合效果genLoop()genSwap()前言 一直对小...
    99+
    2024-04-02
  • 基于JS实现接粽子小游戏的示例代码
    目录游戏设计游戏实现添加粽子元素粽子掉落难度选择开始游戏总结端午节马上就到了,听说你们公司没发粽子大礼包?没关系,这里用 JS 实现了一个简单的接粽子小游戏,能接到多少粽子,完全看你...
    99+
    2024-04-02
  • 基于JS实现飞机大战游戏的示例代码
    目录演示技术栈源码定义敌方战机定义我方战机碰撞检测演示 技术栈 今天没有什么特别要讲的,要不我们提前介绍下次要做的技术吧。你不说话就是同意了。我们开始了。 下图是正则表达式的一些总...
    99+
    2024-04-02
  • 基于JS实现蜘蛛侠动作游戏的示例代码
    目录代码结构代码展示HTMLJS项目运行 游戏截图整个游戏源码是由html、js、 css、图片等代码完成的,无后端数据保存功能。 代码结构 js文件夹是游戏事件控制文件...
    99+
    2024-04-02
  • Python实现小游戏的源代码示例
    这篇文章将为大家详细讲解有关Python实现小游戏的源代码示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、21点数字小游戏展示:首先配置文件的源码:'''配置文件'&...
    99+
    2023-06-14
  • 基于原生JS实现分页效果的示例代码
    这个只是一个分页的demo,主要是思路整理(很久之前项目用的东西) 分页实现的效果 主要是 左侧上一页 右侧是下一页 中间显示主要是超过5个显示 省略号 然后是可配置选项 实现之后的...
    99+
    2024-04-02
  • Java实现经典游戏打砖块游戏的示例代码
    目录前言主要设计功能截图代码实现游戏核心类小球类砖块类总结前言 《JAVA打砖块》游戏是自制的游戏。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的&l...
    99+
    2024-04-02
  • golang原生实现JWT的示例代码
    目录获取Token解析Token实际使用测试结果结语JWT(JSON Web Token)是一种基于JSON的安全令牌,可以用于在不同系统之间传输认证信息。在Go中实现JWT验证,可...
    99+
    2023-05-19
    golang实现JWT golang JWT
  • 使用非html5实现js板连连看游戏示例代码
    向大家分享一款如何实现js版连连看游戏,如下图所示: 首先看一下html的布局方式在index.html文件中: 复制代码 代码如下: <!DOCTYPE html PUBLI...
    99+
    2022-11-15
    html5 js 连连看游戏
  • C/C++实现精灵游戏的示例代码
    目录前言创建win32项目游戏效果核心代码前言 采用面向过程的遍程思想,通过acllib图形库来实现。 acllib下载地址:acllib tom,jerry,dog,heart以及...
    99+
    2024-04-02
  • Java实现扑克牌游戏的示例代码
    目录一、三人扑克二、具体实现Card类生成52张牌打乱顺序发牌三、完整代码一、三人扑克 想不想带上好朋友来上一局三人扑克呢。 二、具体实现 Card类 定义一个花色color变量和...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作