seeratawan01 / vue-lazytube

Embed a YouTube and Vimeo player easily and lazy load the video to save resources and reduces initial load size.
https://codesandbox.io/s/vue-lazytube-hj03y
MIT License
37 stars 15 forks source link
iframe iframe-embeds lazy-loading performance player video vimeo vimeo-api vue vue-lazytube vuejs youtube youtube-api

Vue Lazytube

Embed a YouTube or Vimeo player easily and lazy load the video to save resources and reduces initial load size. Useful when performance and page size is important or for sites with many embedded videos.

For a simple example page with 10 videos, vue-lazytube will reduce loadtime by 7x and memory usage by 2-3x.

Demo online | Tutorial | Sponsor

GitHub release License downloads filesize


Table of Content

Features

Demo

view vue-lazytube

Installation

With a build systems

$ npm install --save vue-lazytube
$ yarn add vue-lazytube

To make the plugin available globally

In your main.js:

import LazyTube from "vue-lazytube";

Vue.use(LazyTube);

To include only in specific components

import { LazyYoutube, LazyVimeo } from "vue-lazytube";

export default {
    name: 'YourComponent',
    components: {
        LazyYoutube,
        LazyVimeo
    },
}

Usage

<template>
    <!-- Youtube Embed -->
    <LazyYoutube src="https://www.youtube.com/watch?v=TcMBFSGVi1c" />

    <!-- Vimeo Embed -->
    <LazyVimeo src="https://player.vimeo.com/video/64654583" />
</template>

API

Props

Name Type Default Value Description Required
src String ` | To load video and iframe, should be Youtube/Vimeo video link. |true`
aspectRatio String 16:9 Maintaining the aspect ratio of video, perfect for responsively handling video embeds based on the width of the parent, should be in *:* format. e.g, 1:1, 4:3, 16:9 and 21:9. false
maxWidth String 560px Defines maximum width of video container. false
showTitle Boolean true Defines whether to show video title on top. false
autoplay Boolean false Defines whether to load the iframe as the page loads (not recommended) false
thumbnailQuality String standard Defines the quality of thumbnail, should be one of the following default, medium, high, standard or maxres false
iframeClass String ly-iframe Defines the class on iframe element false
customTitle String ` | Defines the custom title of the video |false`
customThumbnail String ` | Defines the custom thumbnail image link of the video |false`

Slots

This Component provides some slots. You can use the named slot to render custom play button and loader:

Slot Description
button Slot gives an ability to provide custom play button
loader Slot gives an ability to provide custom loader

Methods

These methods let you control the player using JavaScript, so you can perform the operations like play, stop, pause and reset.

The user's browser must support the HTML5 postMessage feature. Most modern browsers support postMessage.

Name Type Usage
playVideo function this.$refs["lazyVideo"]['playVideo']()
stopVideo function this.$refs["lazyVideo"]['stopVideo']()
pauseVideo function this.$refs["lazyVideo"]['pauseVideo']()
resetView function this.$refs["lazyVideo"]['resetView']()

Note: Must Replace lazyVideo with your ref.

Example

<template>
    <LazyYoutube
        ref="lazyVideo"
        src="https://www.youtube.com/watch?v=TcMBFSGVi1c"
    />

    <button @click="handleClick('playVideo')">Play</button>
    <button @click="handleClick('stopVideo')">Stop</button>
    <button @click="handleClick('pauseVideo')">Pause</button>
    <button @click="handleClick('resetView')">Reset</button>
</template>

<script>
    export default {
      name: "YourComponent",
      components: {},
      methods: {
        handleClick(event) {
          this.$refs["lazyVideo"][event]();
        },
      },
    };
</script>

Open Source License

You may use it under the terms of the MIT Licenses

Buy Me a Coffee

Support me on Patreon