Home

Awesome

NgxVideoTimeline

Demo

example

samplePic

Installation

Compatibility

AngularLatest ngx-video-timeline compatible
170.10.17
160.10.16
150.10.15
140.10.14
130.10.13
120.10.12
110.10.11
100.10.10
90.10.9

Getting Started

npm i ngx-video-timeline@0.10.17

or

yarn add ngx-video-timeline@0.10.17

NgModules Usage

Import the module into your module

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
// Import NgxVideoTimelineModule if you are using a version of Angular that is below Angular V16.
import { NgxVideoTimelineComponent } from 'ngx-video-timeline';


@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        // Import NgxVideoTimelineModule if you are using a version of Angular that is below Angular V16.
        NgxVideoTimelineComponent
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

then use it in html

<ngx-video-timeline 
    class="canvas"
    [speed]="speed" 
    [playTime]="playTime" 
    [isPlayClick]="isPlayClick" 
    [videoCells]="videoCells" 
    [startTimeThreshold]="startTimeThreshold" 
    [endTimeThreshold]="endTimeThreshold" 
    [canvasHeight]="canvasHeight" 
    (playClick)="onPlayClick($event)"
>
</ngx-video-timeline>

in ts file

import { Component, OnInit } from '@angular/core';
import { VideoCellType } from 'ngx-video-timeline';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
    title = 'ngx-video-timeline';

    speed: number;
    canvasHeight: number;
    startTimeThreshold: number;
    endTimeThreshold: number;
    videoCells: VideoCellType[];
    playTime: Date;
    isPlayClick: boolean;

    constructor() {
        this.speed = 10;
        this.isPlayClick = false;
        this.canvasHeight = 80;
        this.startTimeThreshold = new Date().getTime() - 1 * 3600 * 1000;
        this.endTimeThreshold = new Date().getTime() + 1 * 3600 * 1000;
        this.videoCells = [];
        this.playTime = new Date();
    }

    onPlay(): void {

        this.isPlayClick = true;
        this.startTimeThreshold = new Date().getTime() - 1 * 3600 * 1000;
    }

    onPause(): void {

        this.isPlayClick = false;
        // this.endTimeThreshold = new Date().getTime() + 1 * 3600 * 1000;
    }

    onPlayClick(date: number): void {
        // console.log(new Date(date));
        // this.canvasHeight = 60;
    }


    selectedTime(date: any): void {
        this.playTime = date.value;
    }

    changeVideo(): void {
        this.videoCells = [
            {
                beginTime: new Date().getTime() - 1 * 3600 * 1000,
                endTime: new Date().getTime() + 1 * 3600 * 1000,
                style: {
                    background: '#f3e5e4'
                }
            }
        ];
    }

    ngOnInit(): void {
    }
    onDragStart(): void {
        
    }
}

Standalone components usage

import { NgIf } from "@angular/common";
import { Component, OnInit } from "@angular/core";
import { NgxVideoTimelineComponent, VideoCellType } from "ngx-video-timeline";

@Component({
  imports: [NgIf, NgxVideoTimelineComponent],
  selector: "app-home",
  template: `
    <ngx-video-timeline
      [playTime]="playTime"
      [isPlayClick]="isPlayClick"
      [videoCells]="videoCells"
      [startTimeThreshold]="startTimeThreshold"
      [endTimeThreshold]="endTimeThreshold"
      [canvasHeight]="canvasHeight"
      [speed]="speed"
      (playClick)="onPlayClick($event)"
    ></ngx-video-timeline>
    <div>
      @if (isPlayClick) {
      <button (click)="onPause()">pause</button>
      } @else {
      <button (click)="onPlay()">play</button>
      }
      <button (click)="changeVideo()">changeVideos</button>
    </div>
  `,
  standalone: true,
})
export default class HomePage implements OnInit {
  title = "ngx-video-timeline";

  speed: number;
  canvasHeight: number;
  startTimeThreshold: number | string | Date;
  endTimeThreshold: number | string | Date;
  videoCells: VideoCellType[];
  playTime: Date;
  isPlayClick: boolean;

  constructor() {
    this.speed = 1;
    this.isPlayClick = false;
    this.canvasHeight = 80;
    this.startTimeThreshold = new Date();
    this.endTimeThreshold = new Date(new Date().getTime() + 3 * 3600 * 1000);
    this.videoCells = [];
    this.playTime = new Date();
  }

  onPlay(): void {
    this.isPlayClick = true;
    this.startTimeThreshold = new Date().getTime() - 1 * 3600 * 1000;
  }

  onPause(): void {
    this.isPlayClick = false;
    // this.endTimeThreshold = new Date().getTime() + 1 * 3600 * 1000;
  }

  onPlayClick(date: number): void {
    // console.log(new Date(date));
    // this.canvasHeight = 60;
  }

  selectedTime(date: any): void {
    this.playTime = date.value;
  }

  changeVideo(): void {
    this.videoCells = [
      {
        beginTime: new Date().getTime() - 1 * 3600 * 1000,
        endTime: new Date().getTime() + 1 * 3600 * 1000,
        style: {
          background: "#f3e5e4",
        },
      },
    ];
  }

  ngOnInit(): void {}
}


API

NameTypeDefault/ReturnDescription
[canvasHeight]number50Canvas height (not less than 50)
[playTime]number,string,Datenew Date().getTime() - 1 * 24 * 3600 * 1000Playback time (default: the previous day)
[speed]number1The video plays at twice the speed
[forWardValue]number1Fast forward/fast backward video
[startTimeThreshold]number,string,Datenew Date().getTime() - 1 * 12 * 3600 * 1000Left time threshold
[endTimeThreshold]number,string,Datenew Date().getTime() + 1 * 12 * 3600 * 1000Right time threshold
[videoCells]VideoCellType[]VideoCellType[]Video block (shown in different colors)
[borderColor]string"#fff"color of canvas border
[bgColor]string"#fff"color of canvas backgraound
[bottomLineColor]string"rgba(0,0,0,1)"color of the bottomLine
[verticalBarColor]string"rgba(0,0,0,1)"color of the verticalBar
[playBarColor]string"#448aff"color of the playBar
(playClick)anyplayTime(Current timestamp)PlayTime starts playing at speed
(mouseUp)anyreturnTime(Current timestamp)Returns the current time when the mouse is released
(mouseDown)anyreturnTime(Current timestamp)Returns the current time when the mouse is pressed

Interfate VideoCellType

fieldnametyperequired/optionaldefault
beginTimeThe start timenumber,stringrequiredundefined
endTimeThe end of timenumber,stringrequiredundefined
styleThe background colorbooleanoptionalVideoCellStyleType

Interfate VideoCellStyleType

fieldnametyperequired/optionaldefault
backgroundThe background colorstringrequiredundefined

#License ngx-video-timeline is licensed under a MIT License.