d3-transition provides animated transitions for D3 selections, enabling smooth interpolation between DOM states over time. It offers a selection-like interface for animating attributes, styles, and other properties with configurable timing, easing functions, and per-element delays. The library supports automatic detection and interpolation of various data types including numbers, colors, and strings with embedded numbers, while also providing custom interpolator capabilities for advanced animations.
npm install d3-transitionESM (ES6 modules):
import { transition, active, interrupt } from "d3-transition";CommonJS:
const { transition, active, interrupt } = require("d3-transition");For use with d3-selection (required peer dependency):
import { select, selectAll } from "d3-selection";
import "d3-transition"; // Extends selection prototypeimport { select } from "d3-selection";
import "d3-transition";
// Basic transition on a selection
select("body")
.transition()
.duration(750)
.style("background-color", "red");
// Chained transitions
select("circle")
.transition()
.duration(500)
.attr("r", 20)
.transition()
.delay(100)
.attr("fill", "blue");
// Using global transition function
import { transition } from "d3-transition";
const t = transition()
.duration(1000)
.ease(d3.easeBounce);
select(".item").transition(t)
.style("opacity", 0);d3-transition is built around several key components:
.transition() and .interrupt() methods to d3-selection prototypeCore functions for creating and managing transitions from selections or directly from the document root.
function transition(name?: string | Transition): Transition;
function active(node: Element, name?: string): Transition | null;
function interrupt(node: Element, name?: string): void;Methods for animating DOM attributes, styles, and text content with automatic interpolation between start and end values.
// Attribute animation
transition.attr(name: string, value: any): Transition;
transition.attrTween(name: string, factory?: InterpolatorFactory): Transition;
// Style animation
transition.style(name: string, value: any, priority?: string): Transition;
transition.styleTween(name: string, factory?: InterpolatorFactory, priority?: string): Transition;
// Text animation
transition.text(value: any): Transition;
transition.textTween(factory?: InterpolatorFactory): Transition;
// Custom animation
transition.tween(name: string, value?: TweenFunction): Transition;Configuration methods for controlling transition timing including delay, duration, and easing functions.
transition.delay(value?: number | DelayFunction): Transition;
transition.duration(value?: number | DurationFunction): Transition;
transition.ease(value?: EaseFunction): Transition;
transition.easeVarying(factory: EaseFactory): Transition;Methods for creating sub-transitions by selecting elements, filtering, and merging transitions.
transition.select(selector: string | SelectFunction): Transition;
transition.selectAll(selector: string | SelectAllFunction): Transition;
transition.selectChild(selector?: string | SelectFunction): Transition;
transition.selectChildren(selector?: string | SelectFunction): Transition;
transition.filter(filter: string | FilterFunction): Transition;
transition.merge(other: Transition): Transition;Advanced methods for transition coordination, event handling, and lifecycle management.
transition.end(): Promise<void>;
transition.on(typenames: string, listener?: EventListener): Transition;
transition.transition(): Transition;
transition.selection(): Selection;
transition.each(function: EachFunction): Transition;
transition.call(function: CallFunction, ...args: any[]): Transition;
transition.remove(): Transition;interface Transition {
// Selection operations
select(selector: string | SelectFunction): Transition;
selectAll(selector: string | SelectAllFunction): Transition;
filter(filter: string | FilterFunction): Transition;
merge(other: Transition): Transition;
// Animation methods
attr(name: string, value: any): Transition;
attrTween(name: string, factory?: InterpolatorFactory): Transition;
style(name: string, value: any, priority?: string): Transition;
styleTween(name: string, factory?: InterpolatorFactory, priority?: string): Transition;
text(value: any): Transition;
textTween(factory?: InterpolatorFactory): Transition;
tween(name: string, value?: TweenFunction): Transition;
// Timing control
delay(value?: number | DelayFunction): Transition;
duration(value?: number | DurationFunction): Transition;
ease(value?: EaseFunction): Transition;
easeVarying(factory: EaseFactory): Transition;
// Control flow
end(): Promise<void>;
on(typenames: string, listener?: EventListener): Transition;
transition(): Transition;
selection(): Selection;
each(function: EachFunction): Transition;
call(function: CallFunction, ...args: any[]): Transition;
remove(): Transition;
// Utility methods (inherited from d3-selection)
empty(): boolean;
nodes(): Element[];
node(): Element | null;
size(): number;
}
type InterpolatorFactory = (this: Element, d: any, i: number, group: Element[]) => Interpolator;
type Interpolator = (t: number) => any;
type TweenFunction = (this: Element, d: any, i: number, group: Element[]) => Interpolator;
type DelayFunction = (this: Element, d: any, i: number, group: Element[]) => number;
type DurationFunction = (this: Element, d: any, i: number, group: Element[]) => number;
type EaseFunction = (t: number) => number;
type EaseFactory = (this: Element, d: any, i: number, group: Element[]) => EaseFunction;
type EventListener = (this: Element, d: any, i: number, group: Element[]) => void;
type SelectFunction = (this: Element, d: any, i: number, group: Element[]) => Element | null;
type SelectAllFunction = (this: Element, d: any, i: number, group: Element[]) => Element[] | NodeList;
type FilterFunction = (this: Element, d: any, i: number, group: Element[]) => boolean;
type EachFunction = (this: Element, d: any, i: number, group: Element[]) => void;
type CallFunction = (transition: Transition, ...args: any[]) => void;
// d3-selection types (peer dependency)
interface Selection {
// Represents d3-selection Selection interface
// Full definition available from @types/d3-selection
}