- Notifications
You must be signed in to change notification settings - Fork20
🦋 vLitejs is a fast and lightweight Javascript library for customizing video and audio player in Javascript with a minimalist theme (HTML5, Youtube, Vimeo, Dailymotion)
License
vlitejs/vlite
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
vlitejs
(pronounced/viːlaɪt/
) is a fast and lightweight JavaScript library for customizing video and audio player. Written in native JavaScript without dependency, it is built around an API of providers and plugins to extend these capabilities and keep the core with the minimal functionalities.
HTML5 video and audio players are automatically included. Other providers like Youtube or Vimeo can be loaded on demand with theProvider API. Plugins uses the same logic and can be loaded on demand by thePlugin API. Others providers and plugins can be created and loaded by the library.
- If you are concerned about your app's loading performance, this library makes sense as it is extremely lightweight compared to the competition (only 6 KB).
- It is quite rare to need to be compatible with HTML5, Youtube, Vimeo and Dailymotion at the same time. The library contains by default only HTML5 capabilities and exposed the Provider API to extend capabilities with other providers.
- If you need specific behaviors, the plugin API allows to extends the library capabilities.
- If you need to create a video or audio player with a custom skin harmonized for all web browsers.
Sizes of thevlitejs
bundle compared to the competition:
vlitejs | plyr | video.js | |
---|---|---|---|
Uncompressed | 68 KB | 299 KB | 2100 KB |
Compressed | 27 KB | 110 KB | 560 KB |
Gzip | 6 KB | 32 KB | 159 KB |
Note
vlitejs 5.0.1
,plyr 3.7.8
,videojs 8.3.0
- Video & audio -HTML5 video,HTML5 audio,Youtube,Vimeo,Dailymotion.
- Customization - Choose the control elements you want to display.
- No dependency - Written in native Javascript without any framework.
- Fullscreen - Supports native fullscreen API.
- Provider API - Use the available providers or create your own.
- Plugin API - Use the available plugins or create your own.
- Streaming - Support HLS.js streaming playback.
- Sticky - Support for sticky.
- Events - Standardized events for all web browsers, providers and plugins.
- Autoload API - Youtube, Vimeo and Dailymotion API are automatically loaded by their provider.
- Subtitles - Supports multiple subtitle tracks (VTT).
- Picture-in-Picture - Supports Picture-in-Picture API.
- Cast - Supports for Google Cast API.
- AirPlay - Supports for Apple AirPlay API.
- Monetization - Supports for Google IMA SDK.
- Hotkeys - Supports for hotkeys to add keyboard shortcuts.
- Playsinline - Supports the
playsinline
attribute. - SVG icons - SVG are inlined into the library, no sprites to includes.
- Accessibility - W3C and A11Y valid.
✨ You can support this project withGitHub Sponsors! ♡
If you're interested in playing around with vLitejs, you can use the online code playgrounds onGlitch:
The project includes several examples ofvlitejs
implementation in the directoryexamples
. Run the following commands to build the assets for the examples:
npm run build&& npm run build:example
Warning vlitejs@6 is ESM and uses theNode.js package
exports
.
NPM is the recommended installation method. Installvlitejs
in your project with the following command:
npm install vlitejs --save-dev
yarn add vlitejs --dev
Note Minimum supported
Node.js
version is16.20.0
.
You can also download it and include it with a script tag as an ESM.
<linkhref="https://cdn.jsdelivr.net/npm/vlitejs@6/dist/vlite.css"rel="stylesheet"crossorigin/><scripttype="module">importVlitejsfrom'https://cdn.jsdelivr.net/npm/vlitejs@6';</script>
Note You can browse the source of the NPM package atjsdelivr.com/package/npm/vlitejs.
<videoid="player"src="<path_to_video_mp4>"></video>
<audioid="player"src="<path_to_audio_mp3>"></audio>
<divid="player"data-youtube-id="<video_id>"></div>
<divid="player"data-vimeo-id="<video_id>"></div>
<divid="player"data-dailymotion-id="<video_id>"></div>
Importvlitejs
styleheet and the JavaScript library as an ES6 modules.
import'vlitejs/vlite.css';importVlitejsfrom'vlitejs';
Thevlitejs
constructor accepts the following parameters:
Arguments | Type | Default | Description |
---|---|---|---|
selector | String|HTMLElement | null | Unique CSS selector string orHTMLElement to target the player |
config | Object | {} | Player configuration (optional) |
Initialize the player with a CSS selector string.
newVlitejs('#player');
Or, initialize the player with anHTMLElement
.
newVlitejs(document.querySelector('#player'));
The second arguments of the contructor is an optional object with the following parameters:
Arguments | Type | Default | Description |
---|---|---|---|
options | Object | {} | Player options |
onReady | Function|null | null | Callback function executed when theplayer is ready |
provider | String | 'html5' | Player provider |
plugins | Array | [] | Player plugins |
newVlitejs('#player',{options:{},onReady:function(player){},provider:'html5',plugins:[]});
The player controls can be customized with the following parameters:
Options | Type | Default | Description |
---|---|---|---|
controls ¹ ² | Boolean | true | Display the control bar of the video |
autoplay | Boolean | false | Enable the autoplay of the media |
playPause | Boolean | true | Display the play/pause button on the control bar |
progressBar | Boolean | true | Display the progress bar on the control bar |
time | Boolean | true | Display the time information on the control bar |
volume | Boolean | true | Display the volume button on the control bar |
fullscreen ¹ ⁴ | Boolean | true | Display the fullscreen button on the control bar |
poster ¹ | String|null | null | Customize the video poster url |
bigPlay ¹ | Boolean | true | Display the big play button on the poster video |
playsinline ¹ | Boolean | true | Add theplaysinline attribute to the video |
loop | Boolean | false | Whether to loop the current media |
muted ¹ | Boolean | false | Whether to mute the current media |
autoHide ¹ | Boolean | false | Auto hide the control bar in the event of inactivity |
autoHideDelay ¹ | Integer | 3000 | Auto hide delay in millisecond |
providerParams ³ | Object | {} | Overrides the player parameters of the provider |
Note
- ¹ Video only.
- ² Vimeo provider requires a Plus or Pro account to use this feature (seeVimeo plans).
- ³ SeeYoutube embed options andVimeo embed options.
- ⁴ Fullscreen API not yet supported on iPhone.
The
autoplay
parameter automatically activates themuted
option because the API can only be initiated by a user gesture (seeAutoplay policy changes).
Example of customization for theautoHide
and theposter
options.
newVlitejs('#player',{options:{autoHide:true,poster:'/path/to/poster.jpg'}});
The callback functiononReady
is automatically executed when the player is ready. The HTML5 video and audio listen to thecanplay|loadedmetadata
event. The Youtube, Vimeo and Dailymotion provider listen to theonready
event returned by their API.
The function exposes theplayer
parameter as the player instance. You can use it to interact with the player instance and theplayer methods.
Example of a playermuted
when ready:
newVlitejs('#player',{onReady:function(player){player.mute();}});
Note The
onReady
function can also be written with an arrow function.
vlitejs
exposes the following nativeEvent
on the.v-vlite
element. Events are standardized for all providers. Each plugin has its own events which are detailed in their dedicated documentation.
Event Type | Description |
---|---|
play | Sent when the playback state is no longer paused, after the play method or the autoplay |
pause | Sent when the playback state is changed to paused |
progress | Sent periodically to inform interested parties of progress downloading the media. |
timeupdate | Sent when thecurrentTime of the media has changed |
volumechange | Sent when audio volume changes |
enterfullscreen ¹ | Sent when the video switches to fullscreen mode |
exitfullscreen ¹ | Sent when the video exits fullscreen mode |
ended | Sent when playback completes |
Note >¹ Video only.
Example of a listener when the media triggers aplay
event.
newVlitejs('#player',{onReady:(player)=>{player.on('play',()=>{// The video starts playing});}});
The player instance exposes the following methods, accessible when the player is ready.
Method | Parameters | Promise | Description |
---|---|---|---|
play() | - | - | Start the playback |
pause() | - | - | Pause the playback |
setVolume(volume) | Number | - | Set the volume between 0 and 1 |
getVolume() | - | Promise | Get the volume |
getCurrentTime() | - | Promise | Get the current time |
getDuration() | - | Promise | Get the duration |
mute() | - | - | Mute the volume |
unMute() | - | - | Unmute the volume |
seekTo(time) | Number | - | Seek to a current time in seconds |
requestFullscreen() | - | - | Request the fullscreen |
exitFullscreen() | - | - | Exit the fullscreen |
getInstance() | - | - | Get the player instance |
loading() | Boolean | - | Set the loading status |
on(event, function) | String, Function | - | Add an event listener |
off(event, function) | String, Function | - | Remove an event listener |
destroy() | - | - | Destroy the player |
Example of mediaduration
recovery.
newVlitejs('#player',{onReady:(player)=>{player.getDuration().then((duration)=>{// The duration is available in the "duration" parameter});}});
The player exposes some custom CSS properties, locally scopped under the.v-vlite
selector. You can use them to customize the design.
Name | Value | Description |
---|---|---|
--vlite-colorPrimary | #ff7f15 | Primary color |
--vlite-transition | 0.25s ease | Transition |
--vlite-controlBarHeight | 50px | Control bar height |
--vlite-controlBarHorizontalPadding | 10px | Control bar horizontal padding |
--vlite-controlBarBackground | linear-gradient(to top, #000 -50%, transparent) | Control bar background |
--vlite-controlsColor | #fff|#000 | Controls color (video|audio) |
--vlite-controlsOpacity | 0.9 | Controls opacity |
--vlite-progressBarHeight | 5px | Progress bar height |
--vlite-progressBarBackground | rgba(0 0 0 / 25%) | Progress bar background |
Many thanks toVictor Schirm for thevlitejs
logo.
vlitejs
is licensed under theMIT License.
Created with ♡ by@yoriiis.
About
🦋 vLitejs is a fast and lightweight Javascript library for customizing video and audio player in Javascript with a minimalist theme (HTML5, Youtube, Vimeo, Dailymotion)