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 相关文章推荐
JavaScript Konami Code 实现代码
Jul 29 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
require.js的用法详解
Oct 20 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 Javascript
提高Web性能的前端优化技巧总结
Feb 27 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
jquery 使用简明教程
2014/03/05 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
详解Django中的form库的使用
2015/07/18 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
python 6行代码制作月历生成器
2020/09/18 Python
C#面试问题
2016/07/29 面试题
外贸业务员岗位职责
2013/11/24 职场文书
就业表自我评价分享
2014/02/06 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
经典安踏广告词
2014/03/21 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
办公室卫生管理制度
2015/08/04 职场文书
银行求职信怎么写
2019/06/20 职场文书
JavaScript函数柯里化
2021/11/07 Javascript
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技