周末在家,我用Claude Code做了个‘广场舞队形生成器’网页——队长扫了3次码,说‘下月比赛就用这个排阵’

周末在家,我用Claude Code做了个‘广场舞队形生成器’网页——队长扫了3次码,说‘下月比赛就用这个排阵’

站长
2026年4月11日 · 阅读 2958 · 点赞 58 · 预计 5 分钟
分享:

周末在家,我用Claude Code做了个‘广场舞队形生成器’网页——队长扫了3次码,说‘下月比赛就用这个排阵’

没有数据库,没有用户系统,不收集手机号。

就是一个单HTML文件,打开即用,关掉即忘。

但它解决了广场舞队长们最头疼的事:

  • 画队形图太慢(A4纸+铅笔画10分钟,改一次重来)

  • 手机拍照发群里,队员看不清站位

  • 比赛报名要交“队形示意图”,手绘不被接受
  • 我们用Claude Code + Canvas,在周六下午做出了这个工具。上线后,被朝阳区12支舞队队长扫码使用,3支主动拍视频发抖音:“教你怎么30秒排出‘蝴蝶展翅’阵”。

    ---

    🎨 核心能力:用Canvas画“会呼吸”的队形

    不是SVG,不是CSS Grid,而是原生Canvas——因为:

  • 轻量(单文件<80KB)

  • 可导出高清PNG(比赛报名刚需)

  • 支持触摸拖拽(大爷大妈手指粗也能操作)
  • ---

    🛠️ Step-by-step:从Prompt到上线

    1. Prompt定骨架(Cursor中输入)

    生成一个单HTML文件,实现广场舞队形生成器:
  • 页面顶部:标题「广场舞队形生成器」+ 下拉选择预设阵型(同心圆、方阵、S形、蝴蝶、五角星)

  • 中间Canvas画布(600x600px),初始显示预设阵型的圆点(直径16px,红色#e74c3c)

  • 点击画布任意位置:添加一个新圆点(队员)

  • 长按圆点:拖拽移动

  • 右上角按钮「导出PNG」:调用canvas.toDataURL('image/png')生成下载链接

  • 底部显示当前队员数(例:共16人)

  • 所有代码内联,不引用外部JS/CSS

  • 适配手机横竖屏(Canvas自动缩放)

  • Claude Code输出后,保存为dance-pattern.html

    ---

    2. 手动增强:让大爷大妈真的能用

    Claude Code生成的Canvas默认不支持触摸拖拽。加5行代码:

    // 在<script>里追加
    let isDragging = false;
    let draggedDot = null;

    canvas.addEventListener('touchstart', handleTouchStart, false);
    canvas.addEventListener('touchmove', handleTouchMove, false);
    canvas.addEventListener('touchend', handleTouchEnd, false);

    再补上三个函数(完整代码见文末链接)。重点:

  • handleTouchStart:遍历所有圆点,计算手指是否落在圆内(距离<20px)

  • handleTouchMove:实时更新圆点坐标

  • handleTouchEnd:清空状态
  • ---

    3. 预设阵型:用数学公式生成,不是手画

    例如「同心圆」:

    function drawConcentricCircles(ctx, centerX, centerY, numRings = 3) {
    for (let r = 1; r <= numRings; r++) {
    const radius = r * 40;
    const count = r * 8; // 每圈人数递增
    for (let i = 0; i < count; i++) {
    const angle = (i / count) * Math.PI * 2;
    const x = centerX + Math.cos(angle) * radius;
    const y = centerY + Math.sin(angle) * radius;
    drawDot(ctx, x, y);
    }
    }
    }

    Claude Code能写,但需在Prompt中明确:“用三角函数生成同心圆,每圈人数=圈数×8”。

    ---

    4. 导出优化:PNG带水印+尺寸适配

    原生toDataURL导出模糊。升级为:

    const exportCanvas = document.createElement('canvas');
    exportCanvas.width = 1200; // 2x清晰度
    exportCanvas.height = 1200;
    const exportCtx = exportCanvas.getContext('2d');
    // 复制原Canvas内容
    exportCtx.drawImage(canvas, 0, 0, 1200, 1200);
    // 加水印
    exportCtx.fillStyle = 'rgba(0,0,0,0.1)';
    exportCtx.font = 'bold 48px sans-serif';
    exportCtx.fillText('广场舞队形生成器', 200, 100);
    // 触发下载
    const link = document.createElement('a');
    link.download = 'dance-pattern.png';
    link.href = exportCanvas.toDataURL('image/png');
    link.click();

    ---

    🌟 传播密码:为什么队长主动转发?

  • 不注册:扫了就用,队长群直接发短链

  • 不教:所有操作就是“点一下加人、按住拖人、点按钮导出”

  • 有面子:导出图带水印,比赛报名时显得专业

  • 可炫耀:“我们队的新阵型,AI排的!”
  • ---

    🚀 接单延伸:3个轻量升级包

    | 升级 | 描述 | 客户价值 |
    |------|------|----------|
    | 【音乐节拍线】 | 在Canvas上叠加半透明节拍线(随BPM闪烁) | 解决“踩不准点”痛点 |
    | 【服装色块】 | 点击圆点,弹出颜色选择器(红/黄/蓝/绿),导出图带色块 | 满足比赛服装统一要求 |
    | 【分组标注】 | 长按圆点→选“分组”→输入A/B/C组,导出图自动标字母 | 便于教练指挥 |

    全部用Claude Code二次生成,平均交付时间:15分钟/个。

    技术永远服务于人。当广场舞队长笑着举起手机扫二维码时,你写的不是代码,是她们的舞台。

    (完整源码+预设阵型库:[woshird.com/dance](https://woshird.com/dance))

    站长
    人人都是程序员,站长

    喜欢这条 tip?打赏作者一杯咖啡

    你的支持是持续更新的动力

    分享: