react-globe
provides a simple set of props to build interactive globe visualizations. This page documents the prop behaviors in Typescript syntax. More details on specific interfaces can be found in the Options and Interfaces section.
These props configure the ReactGlobe
component.
xxxxxxxxxx
interface Props {
/** Apply an array of animation steps to sequentially animate the globe. */
animations?: Animation[];
/** A set of [lat, lon] coordinates to be focused on. */
focus?: Coordinates | null;
/** Height of globe (e.g. 30vh, 100%, 300px, 400). Note that the globe aspect ratio is scaled to its height */
height?: string | number;
/** Globe background texture. Accepts a URL or image data. If null, disables the background */
globeBackgroundTexture?: string | null;
/** Globe cloud texture. Accepts a URL or image data. If null, disables the clouds */
globeCloudsTexture?: string | null;
/** Globe texture. Accepts a URL or image data. If null, disables the globe texture (there's no reason to do this!) */
globeTexture?: string | null;
/** Distance (measured as a scale factor to the globe radius) that the camera is initially placed. This value should be greater than 1. */
initialCameraDistanceRadiusScale?: number;
/** Initial [lat, lon] coordinates for the globe. */
initialCoordinates?: Coordinates;
/** An array of data that will render interactive markers on the globe. */
markers?: Marker[];
/** Configurations for the globe */
options?: Optional<Options>;
/** Width of globe (e.g. 100vw, 100%, 300px 400) */
width?: string | number;
/** Callback to handle click events of a marker. Captures the clicked marker, ThreeJS object and pointer event. */
onClickMarker?: MarkerCallback;
/** Callback to handle defocus events (i.e. clicking the globe after a focus has been applied). Captures the previously focused coordinates. */
onDefocus?: (previousFocus: Coordinates) => void;
/** Capture the initialized globe instance */
onGetGlobe?: (globe: Globe) => void;
/** Callback when globe background texture is successfully loaded. */
onGlobeBackgroundTextureLoaded?: () => void;
/** Callback when globe clouds texture is successfully loaded. */
onGlobeCloudsTextureLoaded?: () => void;
/** Callback when globe texture is successfully loaded. */
onGlobeTextureLoaded?: () => void;
/** Callback to handle mouseout events of a marker. Captures the previously hovered marker, ThreeJS object and pointer event. */
onMouseOutMarker?: MarkerCallback;
/** Callback to handle mouseover events of a marker. Captures the hovered marker, ThreeJS object and pointer event. */
onMouseOverMarker?: MarkerCallback;
}
react-globe
provides simple but powerful ways to configure globe behaviors. This section documents the available options and more details can be explored in the Usage sections.
xxxxxxxxxx
interface Options {
/** Ambient light color. */
ambientLightColor: string;
/** Ambient light intensity. */
ambientLightIntensity: number;
/** Camera auto-rotation speed. */
cameraAutoRotateSpeed: number;
/** Distance (measured as a scale factor to the globe radius) that the camera is placed. This value should be greater than 1. */
cameraDistanceRadiusScale: number;
/** Max distance (measured as a scale factor to the globe radius) that the camera is allowed to be zoomed out. This value should be greater than the distanceRadiusScale. */
cameraMaxDistanceRadiusScale: number;
/** The maximum angle to orbit vertically. This value should be between 0 to Math.PI radians. */
cameraMaxPolarAngle: number;
/** The minimum angle to orbit vertically. This value should be between 0 to Math.PI radians. */
cameraMinPolarAngle: number;
/** Camera rotation speed */
cameraRotateSpeed: number;
/** Camera zoom speed */
cameraZoomSpeed: number;
/** Enable camera auto-rotation. */
enableCameraAutoRotate: boolean;
/** Enable camera rotation. */
enableCameraRotate: boolean;
/** Enable camera zoom. */
enableCameraZoom: boolean;
/** Enable the defocus feature (i.e. clicking the globe after a focus has been applied). */
enableDefocus: boolean;
/** Enable glow effect of the globe. */
enableGlobeGlow: boolean;
/** Enable glow effect of the marker. */
enableMarkerGlow: boolean;
/** Enable marker tooltips. */
enableMarkerTooltip: boolean;
/** Duration of the focus animation. */
focusAnimationDuration: number;
/** Distance (measured as a scale factor to the globe radius) that the focus will be viewed from. */
focusDistanceRadiusScale: number;
/** Easing function applied for the animation. */
focusEasingFunction: EasingFunction;
/** Opacity of clouds with values from 0 to 1. */
globeCloudsOpacity: number;
/** Globe glow coefficient (see http://stemkoski.github.io/Three.js/Shader-Glow.html). */
globeGlowCoefficient: number;
/** Globe glow color. */
globeGlowColor: string;
/** Globe glow power (see http://stemkoski.github.io/Three.js/Shader-Glow.html). */
globeGlowPower: number;
/** Size of the globe glow radius (measured as a scale factor to the globe radius). */
globeGlowRadiusScale: number;
/** Duration of marker enter animation (in milliseconds). */
markerEnterAnimationDuration: number;
/** Easing function of marker enter animation. */
markerEnterEasingFunction: EasingFunction;
/** Duration of marker exit animation (in milliseconds). */
markerExitAnimationDuration: number;
/** Easing function of marker exit animation. */
markerExitEasingFunction: EasingFunction;
/** Marker glow coefficient (see http://stemkoski.github.io/Three.js/Shader-Glow.html). */
markerGlowCoefficient: number;
/** Marker glow power (see http://stemkoski.github.io/Three.js/Shader-Glow.html). */
markerGlowPower: number;
/** Size of the marker glow radius (measured as a scale factor to the globe radius). */
markerGlowRadiusScale: number;
/** Marker position offset from surface of the globe (measured as a scale factor to the globe radius). If undefined, an automated offset is applied based on the marker type used. */
markerOffsetRadiusScale: number;
/** [min, max] size of markers (measured as scale factors to the globe radius). */
markerRadiusScaleRange: MinMaxPair;
/** Provide a custom marker renderer that should return a THREE.Object3D object for the associated marker data object. */
markerRenderer: (marker: Marker) => Object3D;
/** Callback to render the tooltip string content based on the marker data. */
markerTooltipRenderer: (marker: Marker) => string;
/** If a valid type is passed, ReactGlobe will render the supported marker type. */
markerType: 'dot' | 'bar';
/** Point light color. */
pointLightColor: string;
/** Point light intensity. */
pointLightIntensity: number;
/** [x, y, z] position of the point light (measured as scale factors to the globe radius). */
pointLightPositionRadiusScales: Position;
}
Globe
Classreact-globe
exposes a Globe
class that allows building globe visualizations without the React component.
xxxxxxxxxx
export class Globe {
constructor({
canvasElement,
initialCameraDistanceRadiusScale,
initialCoordinates,
textures,
tooltipElement,
}: {
canvasElement: HTMLCanvasElement;
initialCameraDistanceRadiusScale?: number;
initialCoordinates?: Coordinates;
textures?: {
globeBackgroundTexture?: string | null;
globeCloudsTexture?: string | null;
globeTexture?: string | null;
};
tooltipElement: HTMLDivElement;
});
​
animate(): void;
​
animateClouds(): void;
​
applyAnimations(animations: Animation[]): () => void;
​
defocus(): void;
​
destroy(): void;
​
lock(): void;
​
render(): void;
​
resize(size: { height: number; width: number }): void;
​
saveFocus(focusPosition: Coordinates | null): void;
​
unlock(): void;
​
updateCallbacks(callbacks?: Optional<Callbacks>): void;
​
updateFocus(
focus: Coordinates | null,
overrideOptions?: Optional<Options>,
shouldUnlockAfterFocus?: boolean,
): void;
​
updateMarkers(markers?: Marker[]): void;
​
updateOptions(options?: Optional<Options>): void;
}
Various interfaces that are used in earlier sections are defined below:
xxxxxxxxxx
interface Animation {
/** Coordinates that the globe will animate to. */
coordinates: Coordinates;
/** Duration of the animation. */
focusAnimationDuration: number;
/** Distance (measured as a scale factor to the globe radius) that the globe will animate to. */
focusDistanceRadiusScale: number;
/** Easing function applied for the animation. */
focusEasingFunction: EasingFunction;
}
​
type Coordinates = [number, number];
​
type EasingFunction =
| ['Back', 'In']
| ['Back', 'Out']
| ['Back', 'InOut']
| ['Bounce', 'In']
| ['Bounce', 'Out']
| ['Bounce', 'InOut']
| ['Circular', 'In']
| ['Circular', 'Out']
| ['Circular', 'InOut']
| ['Cubic', 'In']
| ['Cubic', 'Out']
| ['Cubic', 'InOut']
| ['Elastic', 'In']
| ['Elastic', 'Out']
| ['Elastic', 'InOut']
| ['Linear', 'None']
| ['Exponential', 'In']
| ['Exponential', 'Out']
| ['Exponential', 'InOut']
| ['Quadratic', 'In']
| ['Quadratic', 'Out']
| ['Quadratic', 'InOut']
| ['Linear', 'None']
| ['Cubic', 'In']
| ['Cubic', 'Out']
| ['Cubic', 'InOut']
| ['Quartic', 'In']
| ['Quartic', 'Out']
| ['Quartic', 'InOut']
| ['Quintic', 'In']
| ['Quintic', 'Out']
| ['Quintic', 'InOut']
| ['Sinusoidal', 'In']
| ['Sinusoidal', 'Out']
| ['Sinusoidal', 'InOut']
| ['Exponential', 'In']
| ['Exponential', 'Out']
| ['Exponential', 'InOut']
| ['Circular', 'In']
| ['Circular', 'Out']
| ['Circular', 'InOut']
| ['Elastic', 'In']
| ['Elastic', 'Out']
| ['Elastic', 'InOut']
| ['Quadratic', 'In']
| ['Quadratic', 'Out']
| ['Quadratic', 'InOut'];
​
interface Marker {
/** Any other custom fields. */
[key: string]: any;
/** [lat, lon] coordinates of the marker. */
coordinates: Coordinates;
/** Unique ID of marker. */
id: string;
/** Numeric value used to determine the size of the marker. */
value: number;
/** Color of the marker. */
color?: string;
}
​
type MarkerCallback = (
marker: Marker,
markerObject?: Object3D,
event?: PointerEvent,
) => void;
​
type MinMaxPair = [number, number];
​
type Optional<T> = {
[P in keyof T]?: T[P];
};
​
type Position = [number, number, number];