👀 Live Preview
When the audio below loads media data, the status updates:
Waiting for loadeddata…

The onloadeddata attribute is an inline event handler for the loadeddata event on media elements — <audio> and <video>. It runs when the first frame of media data at the current playback position is loaded and ready to render. Use it to hide loading spinners, enable play buttons, or show “ready to play” messages. This is not the same as onload on the page or an image — those are different events. Prefer addEventListener("loadeddata", …) in production; inline onloadeddata is fine for learning.
Inline JS.
Media ready.
Media only.
Not page load.
Preferred way.
Event order.
onloadeddata AttributeThe primary purpose of onloadeddata is to react when an <audio> or <video> element has enough media data loaded to display or play the current frame. That is the moment you can safely hide a “Loading…” overlay, show duration from metadata (often already available), or enable custom controls.
Media elements fire a sequence of events: loadstart → loadedmetadata → loadeddata → canplay → playing. The loadeddata event sits after metadata is known and before playback is guaranteed to be smooth (canplaythrough).
body onload waits for the document and subresources. onloadeddata is only for audio and video media loading.
Set onloadeddata on an audio or video element:
<audio controls onloadeddata="handleLoadedData()">
<source src="track.mp3" type="audio/mpeg">
</audio>
<video controls src="clip.mp4" onloadeddata="videoReady()"></video>loadeddata event fires.<audio> and <video> only.onerror if loading fails.media.addEventListener("loadeddata", handler).<source type> (e.g. audio/mpeg, not audio/mp3).The onloadeddata attribute accepts a string of JavaScript code:
onloadeddata="handleLoadedData()" — Call a named function.onloadeddata="this.classList.add('ready')" — Inline statement on the element.video.onloadeddata = () => { … } assigns the handler.const player = document.getElementById("myVideo");
player.addEventListener("loadeddata", () => {
document.getElementById("loader").hidden = true;
document.getElementById("status").textContent = "Media data loaded — ready.";
});| Event / handler | When it fires | Element |
|---|---|---|
onload | Page or image fully loaded | body, img, iframe |
onloadedmetadata | Duration, dimensions known | audio, video |
onloadeddata | First frame data ready | audio, video |
oncanplay | Can start playback | audio, video |
onplaying | Playback actually started | audio, video |
| Handler attribute | onloadeddata | Media elements |
| Target | Supported? | Notes |
|---|---|---|
<audio> | Yes | Primary use case |
<video> | Yes | Hide poster loader |
<body> / window | No | Use onload instead |
<img> | No | Use img onload |
<source> alone | No | Attach handler on parent audio/video |
onloadeddata vs onloadedmetadata vs oncanplay| Handler | When it fires | Typical use |
|---|---|---|
onloadedmetadata | Metadata parsed (duration, size) | Show duration label early |
onloadeddata | Frame data at current time loaded | Hide spinner, show player |
oncanplay | Enough data to start playing | Enable play button |
Audio loadeddata handler, addEventListener on video, and hide a loading message.
When the audio below loads media data, the status updates:
Waiting for loadeddata…
Run a function when audio media data is loaded:
<audio controls onloadeddata="handleLoadedData()">
<source src="track.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<p id="status"></p>
<script>
function handleLoadedData() {
document.getElementById("status").textContent =
"Audio data has been loaded!";
}
</script>The browser downloads the audio, parses metadata, then fires loadeddata when the first frame of media is available at the current time.
Attach the handler with addEventListener:
<video id="dynamicMedia" controls src="clip.mp4"></video>
<script>
document.getElementById("dynamicMedia").addEventListener("loadeddata", function () {
console.log("Media data has been loaded!");
});
</script>Register once in script. The callback runs when the media element reaches the loadeddata state.
Reveal the player when media data is ready:
const audio = document.getElementById("player");
const loader = document.getElementById("loader");
audio.addEventListener("loadeddata", () => {
loader.hidden = true;
audio.hidden = false;
});Users see feedback while media buffers; loadeddata is a good point to reveal controls without waiting for the entire file.
controls or accessible custom controls with labels.aria-busy="false" when loading finishes.muted if autoplay is required.loadeddata does not replace <track kind="captions">.loadstart begins.
loadedmetadata first.
onloadeddata runs.
Show UI, enable play.
The loadeddata event and onloadeddata handler are supported wherever HTML5 audio and video are supported — all modern browsers.
onloadeddata supportAll major browsers fire loadeddata on audio and video elements.
Bottom line: Safe for audio/video loading UX in all browsers you target today.
onloadeddata on audio and video onlyaddEventListener("loadeddata", …) in productiononerror for failed media loadstype on <source> (e.g. audio/mpeg)aria-busy="false" when data is readyonloadeddata with body onload<source> — use parent media elementaudio/mp3The onloadeddata attribute runs JavaScript when an audio or video element has loaded media frame data — the right hook for spinners, ready messages, and custom players.
Prefer addEventListener("loadeddata", …), know the media event timeline, and pair with onerror for robust playback UX.
onloadeddataBookmark these before building audio and video players.
audio, video.
ScopeFirst frame ready.
EventPage vs media.
CompareUX pattern.
PatternFailed loads.
Pairloadeddata event fires — when frame media data is available on audio or video.<audio> and <video> — not body, img, or input.onload is for pages and images. onloadeddata is a media-specific event on audio/video.loadedmetadata = duration/size known. loadeddata = actual media frame data loaded.addEventListener("loadeddata", handler) is preferred for production.Practice the onloadeddata attribute with audio examples in the Try It editor.
5 people found this page helpful