mcpField
C
cobejs

cobejs

github.com/mengto设计与 UI7.1k1.7k 次安装3 天前更新
代码仓库

关于 cobejs

cobejs 是一项使用 cobe 构建轻量交互式 WebGL 地球的技能,面向网页开发者。它提供旋转、标记和画布配置方面的指导,适用于页面装饰与交互展示。

主要功能

  1. 01使用 cobe 配置 WebGL 地球
  2. 02旋转与外观选项
  3. 03位置标记
  4. 04暂停与销毁实例
  5. 05响应式画布和 DPR 指导

适用场景

  1. 01在首屏或关于页面添加地球
  2. 02以地球标记展示地点

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mengto/skills --skill cobejs

安装后在 Claude Code 中输入/cobejs确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

REFERENCES.md
demo/
index.html
PROMPT.md

详细介绍

cobe.js — 轻量级 WebGL 地球仪技能

适用场景

  • 在首屏或关于页面展示“旋转的地球仪”/位置标记
  • 想要一个小巧、专注的地球仪库(而非完整的 three.js)
  • 以最少的配置实现装饰性与交互性(标记、旋转)

主要 API/模式

  • 核心用法:
    • import createGlobe from "cobe"
    • const globe = createGlobe(canvas, { ...options, onRender(state) { ... } })
  • 重要选项(常用):
    • devicePixelRatio、width、height
    • phi、theta(旋转角度)
    • scale、dark、diffuse
    • baseColor、markerColor、glowColor
    • markers: [{ location: [lat, lon], size, color? }]
  • 生命周期:
    • globe.toggle() 暂停 RAF
    • globe.destroy() 移除实例

常见问题

  • Canvas 尺寸不匹配
    • 设置 CSS 尺寸,并根据 DPR 缩放 canvas 的 width/height。
  • 窗口大小改变后未更新
    • 重新计算 width/height,然后重新创建实例或更新参数。
  • 移动设备上的 DPR 过高
    • 将 DPR 限制在 1–2。

快速示例:带标记的响应式地球仪

import createGlobe from "cobe";

const canvas = document.getElementById("cobe");
let phi = 0;

function setup() {
  const rect = canvas.getBoundingClientRect();
  const dpr = Math.min(window.devicePixelRatio, 2);
  canvas.width = Math.round(rect.width * dpr);
  canvas.height = Math.round(rect.height * dpr);

  const globe = createGlobe(canvas, {
    devicePixelRatio: dpr,
    width: canvas.width,
    height: canvas.height,
    phi: 0,
    theta: 0.2,
    dark: 0,
    diffuse: 1.2,
    scale: 1,
    mapSamples: 16000,
    mapBrightness: 6,
    baseColor: [0.2, 0.2, 0.25],
    glowColor: [1, 1, 1],
    markerColor: [0.8, 0.5, 1],
    markers: [{ location: [1.3521, 103.8198], size: 0.08 }],
    onRender: (state) => {
      state.phi = phi;
      phi += 0.01;
    },
  });

  return globe;
}

let globe = setup();
window.addEventListener("resize", () => {
  globe.destroy();
  globe = setup();
});

需要向用户确认

  • 地球仪的尺寸和位置(首屏、版块、卡片)?
  • 标记位置和颜色(是否与品牌风格一致)?
  • 交互需求(拖动旋转,还是自动旋转)?

评论

支持 Markdown