JS实现简单九宫格抽奖


Posted in Javascript onJune 28, 2022

用JavaScript写一个九宫格的抽奖盘,供大家参考,具体内容如下

点击中间的块,选中奖品的亮块会在边缘的8个块循环;

选中后,弹出选中的内容;

代码参考:

HTML文件:

<body>
<div class="box">
    <ul id="jiangPin">
        <li><a href="javascript:viod(0);" ><span>奖品 1</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 2</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 3</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 4</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 5</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 6</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 7</span></a></li>
        <li><a href="javascript:viod(0);" ><span>奖品 8</span></a></li>
    </ul>
    <button type="button" class="btn" id="beginBtn">点击开始</button>
    <div class="tishi" id="tishi">
        <span>恭喜您获得:</span>
        <p></p>
        <button>确定</button>
    </div>
</div>
</body>

通过position定位来固定奖盘各个板块的位置,将有奖品的8个块分散在九宫格的边缘,开始按钮在九宫格正中间,将弹出的提示框放于整个奖盘的上层显示,初始将其隐藏。

CSS文件:

.box{
    width: 450px;
    height: 450px;
    background-color: #9a6e3a;
    border: 2px solid #990055;
    position: relative;
    z-index: 10;
}
.box>ul>li{
    position: absolute;
    width: 148px;
    height: 148px;
    border: 1px #222222 solid;
    background-color: #ad889d;
}
.box>ul>li>a{
    display: block;
    color: #fff;
    font-size: 30px;
    text-align: center;
    line-height: 148px;
}
/* 开始按钮 */
.btn{
    position: absolute;
    top: 150px;
    left: 150px;
    width: 150px;
    height: 150px;
    border: 1px #222222 solid;
    background-color: #7d53c7;
    outline: none;
    cursor: pointer;
    color: #fff;
    font-size: 25px;
    transition: all 0.5s;
    z-index: 20;
}
.btn:hover{
    background-color: #df04ff;
    font-size: 30px;
}
.btn:active{
    background-color: #7d53c7;
}
.box>ul>li.on{
    background-color: #f00;
}
/* 开始按钮 end */

/* 奖品定位 */
.box>ul>li:nth-child(1){
    top: 0;
    left: 0;
}
.box>ul>li:nth-child(2){
    top: 0;
    left: 150px;
}
.box>ul>li:nth-child(3){
    top: 0;
    left: 300px;
}
.box>ul>li:nth-child(4){
    top: 150px;
    left: 300px;
}
.box>ul>li:nth-child(5){
    top: 300px;
    left: 300px;
}
.box>ul>li:nth-child(6){
    top: 300px;
    left: 150px;
}
.box>ul>li:nth-child(7){
    top: 300px;
    left: 0;
}
.box>ul>li:nth-child(8){
    top: 150px;
    left: 0;
}
/* 奖品定位 end */

/* 提示框 */
.tishi{
    width: 300px;
    height: 146px;
    border: 2px #990055 solid;
    background: #92EC1F;
    border-radius: 20px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-top: -75px;
    margin-left: -150px;
    z-index: 30;
    text-align: center;
    font-size: 25px;
    font-weight: bold;
    display: none;
    animation: tishiAni 0.5s both;
    transition: all 0.5s;
}
.tishi>p{
    color: red;
    font-size: 28px;
    margin-top: 20px;
}
.tishi>button{
    width: 60px;
    height: 30px;
    border:none;
    outline: none;
    cursor: pointer;
    position: absolute;
    right: 30px;
    bottom: 20px;
}
@keyframes tishiAni {
    0%{
        opacity: 0;
    }
    100%{
        opacity: 1;
    }
}
/* 提示框 end */

通过计时器来实现奖品亮块的循环

JavaScript文件:

{
    let jiangPinChi = [
        "奖品1",
        "奖品2",
        "奖品3",
        "奖品4",
        "奖品5",
        "奖品6",
        "奖品7",
        "奖品8",
    ];

    let index = 0;
    let times = Math.round( Math.random()*20 ) +20 ;
    let jiangPin = document.getElementById("jiangPin");
    let beginBtn = document.getElementById("beginBtn");
    let tishi = document.getElementById("tishi");
    let cont = tishi.children;
    let jPLi = jiangPin.children;

    let liBro = function (tag) {
        let fat = tag.parentNode;
        let tagLi = fat.children;
        let othLis = [];
        for (let jPLi of tagLi) {
            if (jPLi === tag) {
                continue;
            }
            othLis.push(jPLi);
        }
        return othLis;
    };

    let showing = function( index ) {
        let othLis = liBro( jPLi[index] );
        for( let i = 0; i<=othLis.length-1 ; i++ ){
            othLis[i].classList.remove("on");
        }
        // othLis.forEach(function( value,i ){
        //     value.classList.remove("on");
        // });
        jPLi[index].classList.add("on");
    };

    let changeFun = function( event ){
        let myset = setInterval(function(){
            index++;
            times--;
            if( index > jPLi.length-1 ){
                index = 0;
            }
            showing( index );
            if( times <= 0 ){
                clearInterval(myset);
                times = Math.round( Math.random()*20 ) +20;
                tishi.style.display = "block";
                cont[1].innerHTML = jiangPinChi[index];
            }
        },100);
    };
    beginBtn.addEventListener("click",changeFun);
    cont[2].addEventListener("click",function( event ){
        tishi.style.display = "none";
    });
}

当然,这个可以扩展成更多的类型,实现不止九宫格的奖盘抽奖模式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Javascript 相关文章推荐
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
location.hash保存页面状态的技巧
Apr 28 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
一篇文章,教你学会Vue CLI 插件开发
Apr 17 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
Feb 13 Javascript
如何构建 vue-ssr 项目的方法步骤
Aug 04 Javascript
vue ref如何获取子组件属性值
Mar 31 Vue.js
Vite + React从零开始搭建一个开源组件库
Jun 25 #Javascript
React自定义hook的方法
Jun 25 #Javascript
小程序实现侧滑删除功能
Jun 25 #Javascript
小程序自定义轮播图圆点组件
Jun 25 #Javascript
微信小程序实现轮播图指示器
Jun 25 #Javascript
create-react-app开发常用配置教程
Jun 25 #Javascript
JavaScript架构搭建前端监控如何采集异常数据
Jun 25 #Javascript
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
php判断目录存在的简单方法
2019/09/26 PHP
laravel model 两表联查示例
2019/10/24 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
Python编程之序列操作实例详解
2017/07/22 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
python 图像增强算法实现详解
2021/01/24 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
乡镇办公室工作决心书
2014/03/11 职场文书
高一学生评语大全
2014/04/25 职场文书
应届生求职自荐信
2014/07/04 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
mysql sql常用语句大全
2022/06/21 MySQL