-->
How to Control YouTube's Video Player with JavaScript

How to Control YouTube's Video Player with JavaScript

  • Player Initialization

    var player;
    
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('video-placeholder', {
            width: 600,
            height: 400,
            videoId: 'Xa0Q0J5tOP0',
            playerVars: {
                color: 'white',
                playlist: 'taJ60kskkns,FG0fTKAqZ5g'
            },
            events: {
                onReady: initialize
            }
        });
    }
    
    function initialize(){
    
        // Update the controls on load
        updateTimerDisplay();
        updateProgressBar();
    
        // Clear any old interval.
        clearInterval(time_update_interval);
    
        // Start interval to update elapsed time display and
        // the elapsed part of the progress bar every second.
        time_update_interval = setInterval(function () {
            updateTimerDisplay();
            updateProgressBar();
        }, 1000)
    
    }
  • Duration

    0:00 / 0:00

    // This function is called by initialize()
    function updateTimerDisplay(){
        // Update current time text display.
        $('#current-time').text(formatTime( player.getCurrentTime() ));
        $('#duration').text(formatTime( player.getDuration() ));
    }
    
    function formatTime(time){
        time = Math.round(time);
    
        var minutes = Math.floor(time / 60),
        seconds = time - minutes * 60;
    
        seconds = seconds < 10 ? '0' + seconds : seconds;
    
        return minutes + ":" + seconds;
    }
  • Progress Bar

    $('#progress-bar').on('mouseup touchend', function (e) {
    
        // Calculate the new time for the video.
        // new time in seconds = total duration in seconds * ( value of range input / 100 )
        var newTime = player.getDuration() * (e.target.value / 100);
    
        // Skip video to new time.
        player.seekTo(newTime);
    
    });
    
    // This function is called by initialize()
    function updateProgressBar(){
        // Update the value of our progress bar accordingly.
        $('#progress-bar').val((player.getCurrentTime() / player.getDuration()) * 100);
    }
  • Play

    play_arrow
    $('#play').on('click', function () {
    
        player.playVideo();
    
    });
  • Pause

    pause
    $('#pause').on('click', function () {
    
        player.pauseVideo();
    
    });
  • Mute / Unmute

    volume_up
    $('#mute-toggle').on('click', function() {
        var mute_toggle = $(this);
    
        if(player.isMuted()){
            player.unMute();
            mute_toggle.text('volume_up');
        }
        else{
            player.mute();
            mute_toggle.text('volume_off');
        }
    });
  • Set volume

    $('#volume-input').on('change', function () {
        player.setVolume($(this).val());
    });
    
    // To get the current volume of the player use this method:
    // player.getVolume()
  • Speed

    $('#speed').on('change', function () {
        player.setPlaybackRate($(this).val());
    });
    
    // To get the current playback rate for a video use this method:
    // player.getPlaybackRate()
    
    // To get all available playback rates for the current video use:
    // player.getAvailablePlaybackRates()
  • Quality

    $('#quality').on('change', function () {
        player.setPlaybackQuality($(this).val());
    });
    
    // To get the actual video quality of the running video use this method:
    // player.getPlaybackQuality()
    
    // To get a list of the available quality formats for a video use:
    // player.getAvailableQualityLevels()
  • Playlist Next

    fast_forward
    $('#next').on('click', function () {
        player.nextVideo()
    });
  • Playlist Previous

    fast_rewind
    $('#prev').on('click', function () {
        player.previousVideo()
    });
  • Dynamically Queue Video

    $('.thumbnail').on('click', function () {
    
        var url = $(this).attr('data-video-id');
    
        player.cueVideoById(url);
    
    });