Volver al ranking
5KB WebGL globe lib.
webglglobe
Métricas clave
Crecimiento de estrellas
Estrellas
5.5k
Forks
322
Crecimiento semanal
—
Issues
30
2k4k
ene 2023ago 2023mar 2024oct 2024may 2025dic 2025jul 2026
Artefactosnpm
npm install cobeREADME
Use any DOM element as bindable markers.
CSS transitions, animations, filters, interactivity, all just work.
High perf, zero deps, ~5KB.
Quick Start
<canvas
id="cobe"
style="width: 500px; height: 500px;"
width="1000"
height="1000"
></canvas>
import createGlobe from 'cobe'
let phi = 0
let canvas = document.getElementById("cobe")
const globe = createGlobe(canvas, {
devicePixelRatio: 2,
width: 1000,
height: 1000,
phi: 0,
theta: 0,
dark: 0,
diffuse: 1.2,
scale: 1,
mapSamples: 16000,
mapBrightness: 6,
baseColor: [0.3, 0.3, 0.3],
markerColor: [1, 0.5, 1],
glowColor: [1, 1, 1],
offset: [0, 0],
markers: [
{ location: [37.7595, -122.4367], size: 0.03 },
{ location: [40.7128, -74.006], size: 0.1, color: [1, 0, 0] }, // custom color
],
arcs: [
{
from: [37.7595, -122.4367],
to: [40.7128, -74.006],
color: [1, 0.5, 0.5], // custom color (optional)
},
],
arcColor: [1, 0.5, 1],
arcWidth: 0.5,
arcHeight: 0.3,
markerElevation: 0.02,
onRender: (state) => {
// Called on every animation frame.
// `state` will be an empty object, return updated params.
state.phi = phi
phi += 0.01
},
})
// To destroy the instance and bindings:
// `globe.destroy()`
Arcs
Arcs connect two locations on the globe:
arcs: [
{
from: [37.7595, -122.4367],
to: [35.6762, 139.6503],
color: [1, 0.5, 0.5], // optional, uses arcColor if not set
},
]
Bindable Markers & Arcs
Markers and arcs can have an id property for CSS Anchor Positioning:
markers: [
{ location: [37.7595, -122.4367], size: 0.03, id: 'sf' },
],
arcs: [
{ from: [37.7595, -122.4367], to: [35.6762, 139.6503], id: 'sf-tokyo' },
]
.marker-label {
position: absolute;
position-anchor: --cobe-sf;
bottom: anchor(top);
left: anchor(center);
opacity: var(--cobe-visible-sf, 0);
filter: blur(calc((1 - var(--cobe-visible-sf, 0)) * 8px));
transition: opacity 0.3s, filter 0.3s;
}
.arc-label {
position: absolute;
position-anchor: --cobe-arc-sf-tokyo;
bottom: anchor(top);
left: anchor(center);
opacity: var(--cobe-visible-arc-sf-tokyo, 0);
}
The globe exposes:
--cobe-{id}/--cobe-arc-{id}— CSS anchor names for positioning--cobe-visible-{id}/--cobe-visible-arc-{id}— visibility variable (0 when behind globe, 1 when visible)
Use the visibility variable to drive opacity, blur, scale, or any CSS property for smooth transitions.
Acknowledgment
This project is inspired & based on the great work of:
- Spherical Fibonacci Mapping, Benjamin Keinert et al.
- https://www.shadertoy.com/view/lllXz4, Inigo Quilez
- https://github.blog/2020-12-21-how-we-built-the-github-globe
- https://github.com/vaneenige/phenomenon
- https://github.com/evanw/glslx
World map asset from:
License
The MIT License.
Repositorios relacionados
