Skip to content

Instantly share code, notes, and snippets.

@cferdinandi
Last active April 19, 2026 05:35
Show Gist options
  • Select an option

  • Save cferdinandi/9044694 to your computer and use it in GitHub Desktop.

Select an option

Save cferdinandi/9044694 to your computer and use it in GitHub Desktop.
A simple method to stop YouTube, Vimeo, and HTML5 videos from playing.
/**
* Stop an iframe or HTML5 <video> from playing
* @param {Element} element The element that contains the video
*/
var stopVideo = function ( element ) {
var iframe = element.querySelector( 'iframe');
var video = element.querySelector( 'video' );
if ( iframe ) {
var iframeSrc = iframe.src;
iframe.src = iframeSrc;
}
if ( video ) {
video.pause();
}
};
@droper327

droper327 commented Dec 17, 2020

Copy link
Copy Markdown

@Luminicus... I love you!........ Thank you so much;

@senorpatricio

Copy link
Copy Markdown

@Luminicus This was a great help. Thank you for sharing your wisdom!

@margieI

margieI commented Jan 15, 2021

Copy link
Copy Markdown

@Luminicus Thank you so much!!! Works just perfect!!!!!

@edmarkmagsalin

Copy link
Copy Markdown

Very useful! Thank you.

@sikaar

sikaar commented Feb 2, 2021

Copy link
Copy Markdown

Very useful and bug proof , thanks !

@sadewole

Copy link
Copy Markdown

@Luminicus This outta do it.

/**
 * Stop all iframes or HTML5 <video>'s from playing
 */
var stopVideos = function () {
	var videos = document.querySelectorAll('iframe, video');
	Array.prototype.forEach.call(videos, function (video) {
		if (video.tagName.toLowerCase() === 'video') {
			video.pause();
		} else {
			var src = video.src;
			video.src = src;
		}
	});
};

Thank you so much!

@Luminicus This outta do it.

/**
 * Stop all iframes or HTML5 <video>'s from playing
 */
var stopVideos = function () {
	var videos = document.querySelectorAll('iframe, video');
	Array.prototype.forEach.call(videos, function (video) {
		if (video.tagName.toLowerCase() === 'video') {
			video.pause();
		} else {
			var src = video.src;
			video.src = src;
		}
	});
};

Very helpful. Thanks

@fysherman

Copy link
Copy Markdown

thanks

@zatarain21

Copy link
Copy Markdown

Thanks, you really safe me. Great job!!!

@ThreePalmTrees

Copy link
Copy Markdown

I feel bad for not thinking of this
All I needed was

const iframeSrc = iframe.src;
iframe.src = iframeSrc;

Thanks for sharing :)

@thaynos

thaynos commented May 29, 2021

Copy link
Copy Markdown

uh what i want to achieve is to pause videos automatically when opening youtube videos cause it gets laggy when i immediatly try to play the video so i want to wait for the cache(?) to load so it would be less laggy. does this script achieve that? how do i use it? i have little to no knowledge in javascript

@OneMohrTime

Copy link
Copy Markdown

A few modifications to fit into my modujs setup and it worked like a charm! Thank you, this was going to take me all day otherwise!

@nickchauhan

Copy link
Copy Markdown

@lreisoliveira

Copy link
Copy Markdown

Great Job! Tks

@thaynos

thaynos commented Apr 28, 2022

Copy link
Copy Markdown

the enhancer for youtube extensions does an excellent job of this and much more!

@nhanitk14dev

Copy link
Copy Markdown

Great! thanks bro =)

@1999fronda

Copy link
Copy Markdown

Thanks for sharing!

@donluismx

Copy link
Copy Markdown

It worked great.
Additionally I used it inside a pair of JQuery events (a modal close close button click and on the background overlay click).

@gostak-dd

Copy link
Copy Markdown

@Luminicus This outta do it.

/**
 * Stop all iframes or HTML5 <video>'s from playing
 */
var stopVideos = function () {
	var videos = document.querySelectorAll('iframe, video');
	Array.prototype.forEach.call(videos, function (video) {
		if (video.tagName.toLowerCase() === 'video') {
			video.pause();
		} else {
			var src = video.src;
			video.src = src;
		}
	});
};

Thanks man!

@vistree

vistree commented May 10, 2023

Copy link
Copy Markdown

Hi all, is there a way to call the function when a YouTube or Vimeo or HTML5 video is clicked to play?

@Fezzito

Fezzito commented Jul 26, 2023

Copy link
Copy Markdown

i tried the two answers and this turnt out to be the best one, in the first one you might enconter the problem of " var iframe = element.querySelector( 'iframe'); is not a function", dont know if it was because of my tsconfig or what.
Also, if you must call the function in several components (wich is my case) you should consider switching var stopVideos to const stopVideos an all the following var to let to avoid scope problems

that being said, amazing approach man, well done

@filipsjostrand

Copy link
Copy Markdown

My updated version to stop all videos on page:

const stopVideos = () => {
  document.querySelectorAll('iframe').forEach(v => { v.src = v.src });
  document.querySelectorAll('video').forEach(v => { v.pause() });
};

(I couldn't use the YouTube postMessage one because some of my YT videos were displayed in a nested iframe via embed.ly)

Excellent! Thumbs up! d.,.b

@bachoo786

Copy link
Copy Markdown

does this stop the related videos from showing on a live youtube stream playing on video js player?

@robweychert

Copy link
Copy Markdown

Super useful, thanks! In my implementation, I added a .replace() to line 10 in case of autoplay:

iframe.src = iframeSrc.replace("?autoplay=1", "");

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment