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

2026世界杯实时看板, 支持AI聊天/竞猜/预测等

先看一下效果


它能做什么

  • 3D 地球仪:48 支参赛队标注在地球上,按小组着色,点击球队查看积分和战绩;今日赛事双方用金色弧线连接,点击弧线直接跳到比赛详情
  • 实时赛程:覆盖最近 ±4 天比赛,点击任意场次展开完整时间线(进球 / 换人 / 黄红牌)
  • 12 小组积分榜:每 30 分钟自动更新,完整积分 / 净胜球 / 近期状态
  • 赛事预测:结合 DraftKings 赔率和积分数据生成胜负概率,带详细分析
  • AI 助手:内置 Claude 聊天,用你自己的 Anthropic API Key,Key 只存本地浏览器

中英文双语,一键切换。


技术架构

整个项目没有后端,没有构建工具,没有 npm install。

浏览器 ─── 读取 data/*.json ──── GitHub Pages(静态文件) ↑ GitHub Actions(每 30 分钟) │ sports-skills CLI (ESPN API,无需 Key)

核心技术选型

选择原因
3D 渲染Three.js v0.165(CDN importmap)无需打包,浏览器直接加载 ES Module
数据管道GitHub Actions + Python免费、定时、可写仓库
数据源sports-skills(ESPN API)无需注册,覆盖世界杯全量数据
AIAnthropic Claude API浏览器直连,用户自带 Key
部署GitHub Pages免费静态托管

为什么不用框架

纯 HTML + ES Modules,加载速度极快,也方便任何人 fork 后直接改。Three.js 通过 importmap 从 CDN 加载,页面打开就能用,没有任何构建步骤。

数据更新机制

# .github/workflows/fetch-data.yml on: schedule: - cron: '*/30 * * * *' # 每 30 分钟

Action 跑 Python 脚本,调用 sports-skills CLI 抓 ESPN 数据,写入data/*.json,commit 后触发 Pages 重新部署。比赛期间数据延迟不超过 30 分钟。

3D 地球仪实现要点

地球仪基于 Three.js,核心是用经纬度坐标把球队标注到球面:

function latLonToVec(lat, lon, r = 1.02) { const phi = (90 - lat) * Math.PI / 180; const theta = (lon + 180) * Math.PI / 180; return new THREE.Vector3( Math.sin(phi) * Math.cos(theta) * r, Math.cos(phi) * r, Math.sin(phi) * Math.sin(theta) * r ); }

今日赛事连线用二次贝塞尔曲线生成弧线,拱起高度根据两点中点距球心的距离自动计算,视觉上有自然的弧度感:

function makeArc(p1, p2, color) { const mid = p1.clone().add(p2).multiplyScalar(0.5); const lift = 1 + 0.35 * (1 - mid.length()); mid.normalize().multiplyScalar(lift + 0.2); // 二次贝塞尔采样 const pts = []; for (let t = 0; t <= 1; t += 0.02) { pts.push( p1.clone().multiplyScalar((1-t)*(1-t)) .add(mid.clone().multiplyScalar(2*t*(1-t))) .add(p2.clone().multiplyScalar(t*t)) ); } return new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts), ...); }

AI 助手的实现细节

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

相关文章:

  • Qwen2.5-Coder-32B-Instruct-AWQ模型部署
  • TRF7970A NFC/RFID读写器GUI深度实操指南:从协议交互到P2P通信
  • Anthropic推理层归零:从vLLM调度到契约式API的架构革命
  • WinUtil:革命性Windows系统管理工具,一键完成软件部署与系统优化
  • 半导体企业如何做 EDA 许可证采购决策:从模块冲突到项目排期,管理层该看哪些数据
  • 终极指南:Awoo Installer如何让Switch游戏安装变得简单高效
  • 在Linux部署AdGuardHome:构建家庭网络去广告DNS网关
  • leetcode:两个数组的交集
  • Linux应急响应实战:从Webshell排查到系统加固的完整指南
  • 告别图片!三种 CSS 原生方案实现任意方向三角形
  • AutoUnipus终极指南:快速掌握U校园智能刷课工具完整教程
  • MouseTester:免费开源的鼠标性能终极测试工具
  • Top10大考察
  • 从工具函数中注入消息
  • Python自动化工具:5分钟快速创建Gmail账号的完整指南
  • 【保姆级教程】小米6X编译LineageOS 20.0完整指南(Android 13)
  • 从高斯光学到凸轮曲线:机械补偿式三组元连续变焦系统设计全流程解析
  • 错误码429频发?OpenAI官方文档未明说的限流逻辑,如何用3种动态退避策略实现零失败调用,
  • HarmonyOS NEXT 实战:RelativeContainer 百分比/比例定位全面指南
  • 二维数组知识
  • DIN EN ISO 5084
  • 3D Web 服务器环境搭建
  • Android 17 新特性全览
  • SpringBoot自动装配底层全流程
  • Agent的诞生(二):让模型开始调用工具
  • AES与Serpent对称加密算法:原理、对比与Python/Android/Qt实战
  • 为什么你用光模块测试FPGA IBERT不通
  • OneMore插件终极指南:如何用160+个强大功能彻底改造你的OneNote体验
  • GESP4级C++考试语法知识(一、指针(9、指针与函数调用)
  • 特殊上位机权限管理方案