Transitions
Transitions provide smooth effects between timeline items, creating professional-looking video content with seamless scene changes. The DesignCombo Video Editor SDK supports various transition types that can be applied between track items.
Transition Basics
Transitions are effects that occur between two timeline items, creating smooth visual connections.
Transition Structure
interface ITransition {id: string; // Unique identifier (format: "fromId-toId")kind: TransitionKind; // Transition kindduration: number; // Duration in millisecondsfromId: string; // Source item IDtoId: string; // Target item IDtrackId: string; // Track ID where transition occurstype: "transition"; // Type identifierdirection?: string; // Direction for directional transitions}
// Transition kinds available in the SDKtype TransitionKind =| "none"| "fade"| "slide"| "wipe"| "flip"| "clockWipe"| "star"| "circle"| "rectangle";// Direction types for directional transitionstype TransitionDirection =| "from-bottom"| "from-top"| "from-left"| "from-right";// State structure for transitionsinterface State {// ... other propertiestransitionIds: string[]; // Array of transition IDstransitionsMap: { // Map of transitions by ID[key: string]: ITransition;};}
## Transition Types### 1. No TransitionNo transition effect between items.```typescriptimport { ADD_TRANSITION } from '@designcombo/state';// No transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "none",duration: 0,type: "transition"}});
2. Fade Transitions
Smooth opacity changes between items.
// Fade transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "fade",duration: 1500,type: "transition"}});
3. Slide Transitions
Items slide in from different directions.
// Slide updispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-bottom"}});// Slide downdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-top"}});// Slide leftdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-right"}});// Slide rightdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-left"}});
4. Wipe Transitions
Items are revealed by wiping across the screen.
// Wipe updispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "wipe",duration: 1500,type: "transition",direction: "from-bottom"}});// Wipe downdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "wipe",duration: 1500,type: "transition",direction: "from-top"}});// Wipe leftdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "wipe",duration: 1500,type: "transition",direction: "from-right"}});// Wipe rightdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "wipe",duration: 1500,type: "transition",direction: "from-left"}});
5. Flip Transitions
Items flip to reveal the next item.
// Flip transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "flip",duration: 1500,type: "transition"}});
6. Clock Wipe Transitions
Items are revealed in a clock-like circular motion.
// Clock wipe transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "clockWipe",duration: 1500,type: "transition"}});
7. Star Transitions
Items are revealed in a star-shaped pattern.
// Star transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "star",duration: 1500,type: "transition"}});
8. Circle Transitions
Items are revealed in a circular pattern.
// Circle transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "circle",duration: 1500,type: "transition"}});
9. Rectangle Transitions
Items are revealed in a rectangular pattern.
// Rectangle transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "rectangle",duration: 1500,type: "transition"}});
Transition Management
Adding Transitions
import { ADD_TRANSITION } from '@designcombo/state';// Add single transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "fade",duration: 1500,type: "transition"}});// Add multiple transitions using bulk operationsimport { EDIT_BULK } from '@designcombo/state';dispatch(EDIT_BULK, {payload: {actions: [{type: ADD_TRANSITION,payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "fade",duration: 1500,type: "transition"}},{type: ADD_TRANSITION,payload: {fromId: "item-2",toId: "item-3",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-bottom"}}]}});
Updating Transitions
import { EDIT_OBJECT } from '@designcombo/state';// Update transition propertiesdispatch(EDIT_OBJECT, {payload: {id: "item-1-item-2",updates: {duration: 2000,direction: "from-top"}}});// Update transition kinddispatch(EDIT_OBJECT, {payload: {id: "item-1-item-2",updates: {kind: "slide",direction: "from-bottom"}}});
Removing Transitions
import { LAYER_DELETE } from '@designcombo/state';// Remove transitions by IDdispatch(LAYER_DELETE, {payload: {trackItemIds: ["item-1-item-2", "item-2-item-3"]}});
Transition Presets
Built-in Transitions
The SDK includes a comprehensive set of built-in transitions:
// Available transition kindsconst TRANSITION_KINDS = ["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"];// Directional transitionsconst DIRECTIONAL_TRANSITIONS = ["slide", // with direction: "from-bottom", "from-top", "from-left", "from-right""wipe" // with direction: "from-bottom", "from-top", "from-left", "from-right"];
Using Built-in Transitions
// Apply a fade transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "fade",duration: 1500,type: "transition"}});// Apply a directional transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-bottom"}});
Transition Sequences
Creating Sequences
// Create transition sequenceconst sequence = [{fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "fade",duration: 1500,type: "transition"},{fromId: "item-2",toId: "item-3",trackId: "track-1",kind: "slide",duration: 1500,type: "transition",direction: "from-bottom"},{fromId: "item-3",toId: "item-4",trackId: "track-1",kind: "flip",duration: 1500,type: "transition"}];// Apply sequence using bulk operationsdispatch(EDIT_BULK, {payload: {actions: sequence.map((transition, index) => ({type: ADD_TRANSITION,payload: transition}))}});
Transition Performance
Optimization
// Enable transition optimizationtimeline.enableTransitionOptimization({useHardwareAcceleration: true,preloadTransitions: true,maxConcurrent: 5});// Set transition qualitytimeline.setTransitionQuality({quality: "high", // "low", "medium", "high"antialiasing: true,smoothing: true});
Transition Events
Lifecycle Events
// Subscribe to transition eventsstateManager.subscribeToTransitions(({ transitionIds, transitionsMap }) => {console.log("Transitions updated:", transitionIds);console.log("Transition details:", transitionsMap);});// Access transition dataconst state = stateManager.getState();console.log('All transitions:', state.transitionsMap);console.log('Transition IDs:', state.transitionIds);// Get specific transitionconst transition = state.transitionsMap["item-1-item-2"];console.log('Transition details:', transition);
Advanced Transitions
Custom Transition Effects
// Register custom transitiontimeline.registerTransition("custom", {render: (fromItem, toItem, progress, canvas) => {// Custom rendering logicconst ctx = canvas.getContext("2d");// Example: custom wave effectconst wave = Math.sin(progress * Math.PI * 4) * 20;// Render from itemctx.globalAlpha = 1 - progress;renderItem(fromItem, ctx);// Render to item with wave offsetctx.globalAlpha = progress;ctx.save();ctx.translate(wave, 0);renderItem(toItem, ctx);ctx.restore();}});// Use custom transitiondispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "custom",duration: 2000,type: "transition"}});
Transition Masks
// Apply transition mask using built-in transitionsdispatch(ADD_TRANSITION, {payload: {fromId: "item-1",toId: "item-2",trackId: "track-1",kind: "circle",duration: 1500,type: "transition"}});
Important Notes
- 1Transition Timing: Transitions work with the
display
timing of track items - 2Performance: Complex transitions may impact rendering performance
- 3Compatibility: Not all transition types work with all item types
- 4Hardware Acceleration: Enable for better performance on supported devices
- 5Memory Management: Clean up custom transitions to prevent memory leaks
Next Steps
- Explore the API Reference
- Check out Examples for practical usage
- Understand Customization for advanced usage