当前位置: 首页 > article >正文

jQuery九宫格抽奖,php处理抽奖信息

功能介绍

jQuery九宫格抽奖是一种基于jQuery库的前端抽奖效果。通过九宫格的形式展示抽奖项,用户点击抽奖按钮后,九宫格开始旋转,最终停在一个随机位置上,此位置对应的抽奖项为用户的中奖结果。

本文实现九宫格的步骤为:
1. 创建一个包含九个格子的九宫格,通过php接口获取奖品信息。
2. 编写jQuery代码,监听抽奖按钮的点击事件,一旦点击,执行抽奖逻辑。
3. 在抽奖逻辑中,通过php接口获取抽奖结果。
4. 使用jQuery的动画函数,让九宫格开始旋转,最后在中奖方块位置停下。
5. 根据停止位置的抽奖项确定用户的中奖结果,并进行相关处理。

为了增加抽奖的趣味性和交互性,还可以在九宫格的格子上增加一些动态效果,例如使用CSS3的动画效果为格子添加旋转、放大等动画效果,或者在抽奖过程中播放一段音乐或动画等等。

效果图

代码实现

后端部分

获取奖品信息,正式项目可以存于数据库中方便后台管理

// 模拟九宫格的奖品
$prize = range(1, 9);
$prizeArray = [];
foreach ($prize as $value){
    $prizeArray[] = [
        'id' => $value,
        'name' => '第' . $value . '个奖品',
        'weight' => $value * 10,// 权重
    ];
}
echo json_encode($prizeArray);

根据奖品权重获取抽奖结果

$totalWeight = array_sum(array_column($prizeArray, 'weight'));// 总权重
$randNumber = rand(1, $totalWeight);// 获取一个随机数
$currentWeight = 0;// 当前权重
$result = [];// 抽奖结果
foreach ($prizeArray as $value){
    $currentWeight += $value['weight'];
    if ($randNumber <= $currentWeight){
        $result = $value;
        break;
    }
}
echo $result['id'];

前端部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>九宫格抽奖</title>
    <link rel="stylesheet" type="text/css" href="index.css">
</head>
<body>
    <div id="lottery-box">
        <ul class="lottery-grid">
        </ul>
        <button id="start-btn">开始抽奖</button>
    </div>
    <script src="jquery.min.js"></script>
    <script src="index.js"></script>
</body>
</html>

样式

#lottery-box {
    width: 320px;
    margin: 0 auto;
    text-align: center;
}

.lottery-grid {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
}

.grid-item {
    width: 100px;
    height: 100px;
    line-height: 100px;
    border: 1px solid #000;
}

#start-btn {
    margin-top: 12px;
}

JS部分,这里通过ajax获取奖品信息和抽奖结果,以及动画效果

$(document).ready(function() {
    $.ajax({
        //请求资源路径
        url:"prize.php",
        //请求方式
        type:"POST",
        //请求成功后调用的回调函数
        success:function (data) {
            data = $.parseJSON(data);
            for (let i = 0; i < data.length; i++){
                $('.lottery-grid').append('<li class="grid-item">' + data[i]['name'] + '</li>');
            }
        },
        //请求失败后调用的回调函数
        error:function () {
            alert("未获取到奖品");
        }
    });
    $('#start-btn').click(function() {
        $(this).prop('disabled', true);
        setTimeout(function(){
            $('#start-btn').prop('disabled', false);
        }, 5000); // 禁用按钮5秒钟
        const $gridItems = $('.grid-item');
        $gridItems.css('background-color', '#fff');
        // 获取抽奖结果
        $.ajax({
            //请求资源路径
            url:"result.php",
            //请求方式
            type:"POST",
            //请求成功后调用的回调函数
            success:function (data) {
                let randomNumber = parseInt(data);
                // 开始动画效果
                let currentIndex = 0;
                const interval = setInterval(function () {
                    $gridItems.eq(currentIndex - 1).css('background-color', '#fff');
                    $gridItems.eq(currentIndex).css('background-color', '#8581812A');
                    currentIndex = (currentIndex + 1) % $gridItems.length;
                }, 200);
                // 停止动画,显示抽奖结果
                setTimeout(function() {
                    clearInterval(interval);
                    for (let i = 1; i <= $gridItems.length; i++){
                        if (randomNumber === i){
                            $gridItems.eq(i).css('background-color', '#f00');
                        }else {
                            $gridItems.eq(i).css('background-color', '#fff');
                        }
                    }
                }, 5000);
            },
            //请求失败后调用的回调函数
            error:function () {
                alert("获取抽奖结果失败");
            }
        });
    });
});


http://www.kler.cn/a/418770.html

相关文章:

  • 树莓派2安装jupyterlab以便更好的编程体验
  • 基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)
  • 【RISC-V CPU debug 专栏 2.3 -- Run Control】
  • 全面解读权限控制与RBAC模型在若依中的实现
  • 【JavaEE初阶 — 网络编程】Socket 套接字 & UDP数据报套接字编程
  • 《实战OpenCV系列》专栏介绍
  • 如何解决服务器扫描出的ASP木马问题
  • C 运算符优先级
  • 李永平:以科技创新为引擎,驱动中国国际未来产业研究院不断前行
  • 【CSS】一篇掌握CSS
  • Git忽略文件
  • 【C语言】结构体嵌套
  • 【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现
  • Springboot集成通义大模型
  • 技术周总结 11.11~11.17 周日(Js JVM XML)
  • 动手学深度学习-2数据预处理、3线性代数
  • 梯度规约(gradient reduction)是什么?中英双语解释
  • 【热门主题】000071 大数据治理:开启数据价值新征程
  • 【力扣】387.字符串中的第一个唯一字符
  • VPC9527同步整流控制器,相对最大电压检测与强力自供电,与MP6908完全PIN TO PIN
  • Unity XR Interaction Toolkit 开发教程:手柄追踪【3.0以上版本】
  • MFC 实现按钮按下持续执行
  • Linux驱动开发第3步_INPUT子系统框架下的外部中断
  • HarmonyOS(61) 组件间状态共享的分类以及状态选择器的选取优先级
  • Android Glide批量加载Bitmap,拼接组装大Bitmap,更新单个AppCompatImageView,Kotlin(3)
  • 【element-tiptap】导出word