Translate

Embed YouTube Videos with JavaScript


Embedding YouTube videos is a common task for website developers, bloggers, educators, and content creators. While the standard YouTube embed code works well in most cases, there are times when you may want more control over how videos are loaded, displayed, or interacted with. This is where embedding with JavaScript becomes powerful.

In this guide, we’ll walk through everything you need to know to embed YouTube videos using JavaScript—from simple iframes to dynamic embedding using the YouTube IFrame Player API.

Why Use JavaScript to Embed YouTube Videos?

Here are a few scenarios where JavaScript embedding is beneficial:

  • Embedding videos dynamically based on user input or page content.

  • Delaying video loading until after user interaction to improve performance.

  • Customizing the video player (autoplay, mute, loop, etc.).

  • Controlling video playback via code (play, pause, seek).

  • Embedding multiple videos without cluttering HTML.

Let’s get started with the basics and then build up to more advanced use cases.


Method 1: Basic YouTube Embed Using JavaScript

The simplest way to embed a YouTube video using JavaScript is by creating an iframe element dynamically and injecting it into the page.

Example: Basic JavaScript Embed

<div id="video-container"></div>

<script>
  var videoId = "dQw4w9WgXcQ"; // Replace with your video ID
  var iframe = document.createElement('iframe');
  iframe.width = "560";
  iframe.height = "315";
  iframe.src = "https://www.youtube.com/embed/" + videoId;
  iframe.title = "YouTube video player";
  iframe.frameBorder = "0";
  iframe.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture";
  iframe.allowFullscreen = true;

  document.getElementById("video-container").appendChild(iframe);
</script>

This script creates an iframe and inserts it into the div with ID video-container.


Method 2: Embed Video Based on User Input

You can let users input a YouTube URL or video ID and dynamically embed the corresponding video.

Example: User Input Embed

<input type="text" id="video-url" placeholder="Enter YouTube URL or ID">
<button onclick="embedVideo()">Embed Video</button>
<div id="video-output"></div>

<script>
function getYouTubeID(url) {
  var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]{11}).*/;
  var match = url.match(regExp);
  return (match && match[2].length == 11) ? match[2] : null;
}

function embedVideo() {
  var input = document.getElementById("video-url").value;
  var videoId = getYouTubeID(input) || input;
  
  var iframe = document.createElement('iframe');
  iframe.width = "560";
  iframe.height = "315";
  iframe.src = "https://www.youtube.com/embed/" + videoId;
  iframe.title = "YouTube video player";
  iframe.frameBorder = "0";
  iframe.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture";
  iframe.allowFullscreen = true;

  var container = document.getElementById("video-output");
  container.innerHTML = ""; // Clear previous video
  container.appendChild(iframe);
}
</script>

This lets a user input a YouTube link, automatically extracts the video ID, and embeds the video.


Method 3: Use the YouTube IFrame Player API

If you want advanced control (like play, pause, stop, events), you need to use the YouTube IFrame Player API.

Step 1: Load the API

<script src="https://www.youtube.com/iframe_api"></script>

Step 2: Add a Container

<div id="player"></div>

Step 3: Initialize the Player with JavaScript

<script>
  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '360',
      width: '640',
      videoId: 'M7lc1UVf-VE', // Replace with your video ID
      playerVars: {
        autoplay: 0,
        controls: 1,
        modestbranding: 1
      },
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

  function onPlayerReady(event) {
    console.log("Player is ready");
  }

  function onPlayerStateChange(event) {
    console.log("State changed to: " + event.data);
  }

  function playVideo() {
    player.playVideo();
  }

  function pauseVideo() {
    player.pauseVideo();
  }
</script>

Step 4: Add Control Buttons (Optional)

<button onclick="playVideo()">Play</button>
<button onclick="pauseVideo()">Pause</button>

This setup gives you full control over the embedded video. You can programmatically control playback and respond to events such as video ending, playing, or pausing.


Optional: Lazy Load YouTube Embed for Performance

To improve page speed, you might want to load YouTube videos only when a user clicks a thumbnail or play button.

Example: Lazy Loading YouTube Embed

<div id="lazy-video" style="cursor:pointer;" onclick="loadYouTubeVideo()">
  <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg" width="560" height="315" alt="Video Thumbnail">
</div>

<script>
function loadYouTubeVideo() {
  var container = document.getElementById('lazy-video');
  var iframe = document.createElement('iframe');
  iframe.width = "560";
  iframe.height = "315";
  iframe.src = "https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=1";
  iframe.title = "YouTube video player";
  iframe.frameBorder = "0";
  iframe.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture";
  iframe.allowFullscreen = true;

  container.innerHTML = "";
  container.appendChild(iframe);
}
</script>

This improves performance by deferring the loading of the actual video player until the user interacts with the placeholder.


Conclusion

Embedding YouTube videos with JavaScript gives you flexibility, control, and performance improvements compared to static HTML embeds. Whether you're building a video gallery, allowing user-generated content, or controlling playback programmatically, JavaScript gives you all the tools to manage YouTube integration efficiently.

To summarize:

  • Use simple JavaScript for dynamic video insertion.

  • Parse YouTube URLs to extract video IDs.

  • Use the YouTube IFrame Player API for advanced features.

  • Implement lazy loading to optimize performance.

With these techniques, you can go beyond the standard iframe embed and create highly customized, interactive video experiences on your site.