onload
Uruchamia kod JavaScript, gdy zasób skończy się wczytywać: cała strona, obraz, ramka, skrypt albo arkusz stylów.
- Dotyczy
<body>,<img>,<iframe>,<script>z atrybutemsrc,<link>i inne elementy, które wczytują zasób
Przykład
#<p id="status">Wczytywanie okładki…</p>
<img src="/collections/covers/kurs-html-css-od-podstaw.webp"
alt="Okładka kursu HTML i CSS od podstaw" width="300" height="200"
onload="
const size = this.naturalWidth + ' × ' + this.naturalHeight + ' px';
document.getElementById('status').textContent = 'Okładka wczytana: ' + size;
">Po pobraniu obrazu this.naturalWidth i this.naturalHeight podają prawdziwe wymiary pliku, choć na stronie obraz jest pomniejszony do 300 × 200 pikseli.
Definicja i zastosowanie
#Atrybut onload reaguje na zdarzenie load, które zachodzi, gdy element skończy wczytywać swój zasób. Na <img> oznacza to pobrany obraz, na <iframe> wczytany dokument w ramce, na <script src> pobrany i wykonany skrypt, a na <link rel="stylesheet"> gotowy arkusz stylów. Gdy wczytywanie się nie powiedzie, zamiast load zachodzi zdarzenie error, które obsłużysz atrybutem onerror.
Na elemencie <body> atrybut dotyczy całej strony i działa tak samo jak zdarzenie load obiektu window. Zachodzi dopiero wtedy, gdy wczytają się wszystkie obrazy, style, skrypty i ramki, więc na wolnym łączu może minąć sporo czasu. Jeśli skrypt potrzebuje tylko gotowego HTML, lepiej użyć atrybutu defer albo zdarzenia DOMContentLoaded, które zachodzi wcześniej.
W kodzie atrybutu this wskazuje element, np. wczytany obraz z jego prawdziwymi wymiarami naturalWidth i naturalHeight. Zdarzenie load nie wypływa w górę drzewa, więc atrybut ustawiasz bezpośrednio na elemencie, który wczytuje zasób. W większych projektach dodaj obsługę przez addEventListener("load", …).
Składnia
#<img src="…" alt="…" onload="kod JavaScript">
<body onload="kod JavaScript">…</body>Kiedy zachodzi zdarzenie load
#<body>
Wczytała się cała strona: HTML, obrazy, style, skrypty i ramki. To samo coloadna obiekciewindow.<img>
Obraz został pobrany. Przyloading="lazy"następuje to dopiero, gdy obraz zbliży się do widocznej części strony.<iframe>
W ramce wczytał się dokument. Zdarzenie zachodzi też przy każdej kolejnej nawigacji wewnątrz ramki.<script src>
Zewnętrzny skrypt został pobrany i wykonany.<link rel="stylesheet">
Arkusz stylów został pobrany i przetworzony.
Więcej przykładów
#<p id="avatar-status">Wczytywanie avatara…</p>
<img src="data:," alt="Avatar użytkownika" width="64" height="64"
onload="document.getElementById('avatar-status').textContent = 'Avatar wczytany'"
onerror="document.getElementById('avatar-status').textContent = 'Nie udało się wczytać avatara'">Adres data:, to celowo uszkodzony obraz, więc zamiast load zachodzi error. Przeglądarka pokazuje tekst alternatywny, a onerror zmienia komunikat.
<body onload="document.getElementById('status').textContent = 'Wczytano wszystko, także obrazy'">
<p id="status">Wczytywanie…</p>
<script>
document.addEventListener('DOMContentLoaded', () => {
console.log('HTML gotowy, obrazy mogą się jeszcze wczytywać');
});
</script>
</body>Komunikat z DOMContentLoaded pojawi się w konsoli wcześniej, bo to zdarzenie nie czeka na obrazy, style i ramki. Na load warto czekać tylko wtedy, gdy potrzebujesz wszystkich zasobów, np. wymiarów obrazów.
Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Podawaj obrazom
widthiheight. Przeglądarka zarezerwuje wtedy miejsce, strona nie przeskoczy po wczytaniu obrazu i nie trzeba poprawiać układu wonload. - Kod, który potrzebuje tylko elementów strony, umieść w skrypcie z atrybutem
defer, a nie w<body onload>. Uruchomi się szybciej, bez czekania na obrazy.
Powiązane hasła
#- <img>Obraz osadzony na stronie.
- <body>Widoczna część dokumentu: wszystko, co użytkownik zobaczy na stronie i z czym może wejść w interakcję.
- <script>Osadza kod JavaScript w stronie albo wczytuje go z pliku, żeby dodać stronie zachowanie.
- <iframe>Ramka, która osadza na stronie inny dokument HTML, na przykład film z YouTube albo mapę.
- onclickUruchamia kod JavaScript po kliknięciu elementu. Najprostszy, ale nie najlepszy sposób obsługi zdarzeń.
Widzisz błąd albo brakuje przykładu? Napisz do nas.