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

【工具】log-lottery最受欢迎3D球体年会抽奖程序

log-lottery 项目完整教程

log-lottery是目前最受欢迎的开源3D球体年会抽奖程序之一(2025年底数据:GitHub 约 2k+ stars,432 forks)。
它采用Vue 3 + Three.js技术栈,实现炫酷的3D动态球体抽奖效果,非常适合公司年会、团队团建、线上直播抽奖、员工生日抽奖等场景。

项目GitHub:https://github.com/LOG1997/log-lottery
在线体验(推荐先看效果):

  • https://log1997.github.io/log-lottery/
  • https://to2026.xyz/log-lottery/
  • https://1kw20.fun/log-lottery/ (备用)

一、核心理念

  1. 视觉优先,仪式感拉满
    抛弃传统平面转盘/九宫格,采用3D球体将所有参与者姓名分布在球面上。
    抽奖过程:高速旋转 → 渐减速 → 停止 → 中奖者放大+高亮,整个动画科技感与沉浸感极强。

  2. 高度配置化,低代码/零代码上手
    奖项、人员、背景、音乐、颜色、Logo 等几乎全部通过界面配置完成,无需修改源码。

  3. 纯前端 + 本地持久化
    数据存储在浏览器IndexedDB(支持图片/音乐上传持久化),无需后端服务器。
    支持 Excel 一键导入参与人员 + 导出中奖结果,适合临时/一次性活动。

  4. 开箱即用 + 现代化部署
    支持静态托管、GitHub Pages、Docker 一键部署,特别友好NAS/内网/服务器场景。

二、主要功能一览

功能支持说明
3D球体动态抽奖Three.js 核心,球体旋转+中奖聚焦动画
多奖项/多轮次支持可设置不同奖品、数量、参与规则(全员/部分)
Excel 导入参与人员下载模板 → 填写 → 一键导入(支持姓名/工号等多列)
Excel 导出中奖结果抽完一轮/全部后导出,方便统计/发奖
背景音乐 & 抽奖音效可上传/切换,支持开关
自定义背景/颜色/Logo上传图片、修改标题/配色/布局
临时加奖/现场调整抽奖过程中可快速新增奖项
本地数据持久化IndexedDB 保存配置,刷新/关机不丢(图片音乐也支持)
多语言(i18n)部分主要中文,国际化支持正在完善
弹幕/评论互动开发中计划支持直播场景互动
后端依赖纯前端项目

三、技术选型

  • 前端框架:Vue 3(Composition API +<script setup>
  • 3D渲染:Three.js
  • 状态管理:Pinia
  • UI组件:DaisyUI+ Tailwind CSS
  • 文件处理:SheetJS(xlsx 导入导出)
  • 构建工具:Vite
  • 存储:IndexedDB(主) / localStorage 降级
  • 包管理:pnpm
  • 部署:Docker / Nginx 静态托管 / GitHub Pages

四、快速上手(5分钟跑通)

方式1:Docker(最推荐,适合NAS/服务器/公司内网)
# 拉取社区维护的活跃镜像(原作者或社区常用)dockerpull fooololo/log-lottery:latest# 快速运行dockerrun-d\--namelog-lottery\-p9279:80\fooololo/log-lottery:latest# 访问:http://你的IP:9279/log-lottery/

或使用docker-compose.yml(更方便持久化):

version:'3.8'services:lottery:image:fooololo/log-lottery:latestcontainer_name:log-lotteryrestart:unless-stoppedports:-"6719:80"# 或你想要的端口# volumes: # 如需持久化数据可打开# - ./data:/app/data
方式2:本地开发/调试(适合想改代码的人)
gitclone https://github.com/LOG1997/log-lottery.gitcdlog-lotterypnpminstall# 推荐 pnpm,也可用 npm/yarnpnpmdev# 启动开发模式 http://localhost:5173/

打包静态文件:

pnpmbuild# dist 目录即可部署到 Nginx / GitHub Pages

注意:首次使用建议用最新版 Chrome/Edge(PC端最佳),手机端仅适合控制,不推荐投屏主界面。

五、标准使用流程

  1. 打开页面 → 右上角「设置」进入配置
  2. 奖项配置→ 添加奖品(名称、数量、图片、参与规则)
  3. 人员管理→ 下载模板 → 填姓名 → 导入 Excel
  4. 界面配置→ 修改标题、颜色、背景图、布局列数等
  5. 图片/音乐管理→ 上传自定义背景/Logo/音乐(自动存 IndexedDB)
  6. 返回首页 → 选择当前奖项 → 「开始抽奖」
  7. 抽奖中可暂停/重新抽 → 确认中奖后人员自动移除(避免重复)
  8. 抽完 → 右上角导出 Excel 结果

小技巧:如果图片/音乐加载异常 → 全局配置 → 「重置所有数据」 → 刷新页面。

六、典型案例 & 代码片段

案例:300–500人公司年会

奖项示例:

  • 一等奖:iPhone / iPad × 1–3
  • 二等奖:智能手表 / 耳机 × 5–10
  • 参与奖:红包/积分 × 剩余

操作建议:

  • 提前1–2天导入名单 + 测试抽奖动画
  • 当天接投影/大屏 + 外接音箱播放背景音乐
  • 主持人/工作人员操作键盘/鼠标控制开始/停止

核心代码片段解读(3D球体生成简化版,stores/lottery.js)

import*asTHREEfrom'three'import{defineStore}from'pinia'exportconstuseLotteryStore=defineStore('lottery',{state:()=>({scene:null,camera:null,renderer:null,particles:[]// 姓名文本精灵数组}),actions:{init3D(container){this.scene=newTHREE.Scene()this.camera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,2000)this.renderer=newTHREE.WebGLRenderer({antialias:true})// ... 添加光源、轨道控制器等container.appendChild(this.renderer.domElement)},createNameParticles(names,radius=800){this.particles.forEach(p=>this.scene.remove(p))this.particles=[]names.forEach((name,i)=>{constsprite=this.createTextSprite(name)// 生成2D文字纹理 → Sprite// 黄金分割角均匀分布在球面上consttheta=Math.acos(2*(i+0.5)/names.length-1)constphi=i*Math.PI*(1+Math.sqrt(5))sprite.position.set(radius*Math.sin(theta)*Math.cos(phi),radius*Math.sin(theta)*Math.sin(phi),radius*Math.cos(theta))this.particles.push(sprite)this.scene.add(sprite)})},// ... 旋转动画、停止聚焦中奖者等方法使用 GSAP 或 RAF 实现}})

七、常见问题 & 优化建议

问题解决办法
人数多(>800)卡顿开启低配模式 / 减小文字大小 / 分批抽奖
图片音乐加载失败全局配置 → 重置所有数据 → 重新上传
想持久化到服务器二次开发加 Node 服务存 JSON,或 fork 参考 moshang-xc/lottery(有后端)
多轮不重复抽奖已内置支持,中奖者自动从球体移除
手机/平板体验差PC/笔记本投屏主界面,手机仅作控制端
想加概率控制/防作弊当前纯随机,可参考 fuzhengwei/Lottery 项目(Java后端完整概率系统)

这份教程基于 2025 年 12 月最新版本整理,希望能帮你在 2026 年年会/活动中快速用上最酷炫的 3D 抽奖!

http://www.jsqmd.com/news/135531/

相关文章:

  • 中文编程语言“华文 (HuaWen)”综合设计方案框架
  • 基于python的中文起点网top500小说数据提取的设计与实现(毕设源码+文档)
  • C# 字符串比较与比较器应用指南(AI笔记)
  • 读人机沟通法则:理解数字世界的设计与形成05机器可以被测量
  • [晕事]今天做了件晕事97,强制停止ctrl+c make
  • 2025最新!专科生必备8个AI论文工具:开题报告写作全测评
  • 【课程设计/毕业设计】基于springboot高校党建管理系统基于springboot的高校党员信息管理系统【附源码、数据库、万字文档】
  • 2025银川最新水电暖维修、家电维修、管道疏通、装修改造、家政保洁首要推荐斑马管家家政:银川家庭生活琐事的一站式省心之选 - 全局中转站
  • 【机器学习】-超参数(模型“调音师”的魔法)
  • 【毕业设计】基于springboot的高校党员信息管理系统(源码+文档+远程调试,全bao定制等)
  • virtualbox键盘多个按键同时按下失灵,打字难受
  • 共享指针——弱引用
  • wsl docker安装达梦数据库的过程
  • Java毕设选题推荐:基于springboot的高校党员信息管理系统基于springboot高校党建管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Ruby RubyGems:全面解析
  • Hugging Face smolagents曝高危漏洞:反序列化缺陷可致远程代码执行
  • 两种核心消息队列:环形队列与RTOS消息队列解析
  • 自考必备!8个AI论文软件推荐,轻松搞定毕业论文格式规范!
  • Bootstrap5 按钮组
  • spec kit ai code review
  • mysql的跨库查询
  • 基于Python豆瓣电影数据可视化分析设计与实现(毕设源码+文档)
  • 【Azure Notification Hub】实验Notification Hub页面中的Test Tag 功能 -- 定向发送消息到指定的Android设备
  • Perl 基础语法
  • AI元人文构想的诗意阐释
  • Day39bootstrap--组件
  • 详细介绍:初识MySQL 库的操作
  • Hive调优
  • 生产级微服务应用全攻略:从骨架到运维的完整体系
  • bat文件中,提权,以管理员运行