Skip to content

Scrollytelling block

A type: scrollytelling block: one map plus an ordered list of chapters that drive the camera and layer visibility as the reader scrolls. For narrative and examples see Scrollytelling.

Type: "scrollytelling" · Required

Block type

Type: string · Required

Unique block identifier

Type: string

CSS class name for container

Type: string

Inline CSS styles for container

Type: object · Required

Map configuration with MapLibre options

Same shape as config.

Type: "light" | "dark" · Default: "light"

Visual theme

Type: boolean · Default: false

Show chapter markers on map

Type: string · Default: "#3FB1CE"

Chapter marker color

Type: object[] · Default: []

Persistent layers (visible throughout story)

Each entry: see the Layers reference.

Type: object[] · Required · Min items: 1

Story chapters

Path: chapters[].id · Type: string · Required

Unique chapter identifier

Path: chapters[].title · Type: string · Required

Chapter title

Path: chapters[].center · Type: [number, number] · Required

Map center [longitude, latitude]

Path: chapters[].zoom · Type: number · Required

Zoom level

Path: chapters[].description · Type: string

Chapter description (HTML/markdown supported)

Path: chapters[].image · Type: string (URL)

Hero image URL

Path: chapters[].video · Type: string (URL)

Video URL

Path: chapters[].pitch · Type: number · Default: 0 · Range: 0 to 85

Camera pitch angle (0-85)

Path: chapters[].bearing · Type: number · Default: 0 · Range: -180 to 180

Camera bearing (-180 to 180)

Path: chapters[].speed · Type: number · Default: 0.6 · Range: 0 to 2

Animation speed multiplier (0-2)

Path: chapters[].curve · Type: number · Default: 1 · Range: 0 to 2

Animation curve (0=linear, 1=default, 2=steep)

Path: chapters[].animation · Type: "flyTo" | "easeTo" | "jumpTo" · Default: "flyTo"

Animation type

Path: chapters[].rotateAnimation · Type: boolean

Enable continuous rotation animation

Path: chapters[].spinGlobe · Type: boolean

Not implemented (warns, no effect). Globe projection itself is the map-level projection: { type: globe }

Path: chapters[].alignment · Type: "left" | "right" | "center" | "full" · Default: "center"

Content alignment

Path: chapters[].hidden · Type: boolean · Default: false

Hide chapter content (map-only)

Path: chapters[].layers · Type: object

Layer visibility control

Path: chapters[].layers.show · Type: string[] · Default: []

Layer IDs to show

Path: chapters[].layers.hide · Type: string[] · Default: []

Layer IDs to hide

Path: chapters[].onChapterEnter · Type: object[] · Default: []

Actions when entering chapter

Path: chapters[].onChapterEnter[].action · Type: string · Required

Action type

Allowed values: setFilter, setPaintProperty, setLayoutProperty, flyTo, easeTo, fitBounds, custom

Path: chapters[].onChapterEnter[].layer · Type: string

Target layer ID

Path: chapters[].onChapterEnter[].property · Type: string

Property name (for setPaintProperty/setLayoutProperty)

Path: chapters[].onChapterEnter[].value · Type: any

Property value

Path: chapters[].onChapterEnter[].filter · Type: array | null

Filter expression (for setFilter, null to clear)

Path: chapters[].onChapterEnter[].bounds · Type: number[]

Bounds array (for fitBounds)

Path: chapters[].onChapterEnter[].options · Type: map of any

Additional options

Path: chapters[].onChapterExit · Type: object[] · Default: []

Actions when exiting chapter

Each entry has the same shape as chapters[].onChapterEnter[].

Path: chapters[].callback · Type: string

Custom callback function name

Type: string

Footer content (HTML)