| <!DOCTYPE html> |
| <head> |
| <title>Below-viewport images with loading='lazy' load when set to |
| loading='eager' or the `loading` attribute is removed</title> |
| <link rel="author" title="Dom Farolino" href="mailto:domfarolino@gmail.com"> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-loading"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| |
| <script> |
| const t = async_test("Below-viewport images with loading='lazy' load when " + |
| "set to loading='eager' or the `loading` attribute is " + |
| "removed"); |
| |
| const img_1_onload = t.unreached_func("#img_1 should not load before the " + |
| "window load event"); |
| const img_2_onload = t.unreached_func("#img_2 should not load before the " + |
| "window load event"); |
| |
| window.addEventListener("load", t.step_func(() => { |
| const img_1 = document.querySelector('#img_1'); |
| const img_2 = document.querySelector('#img_2'); |
| |
| const img_1_promise = new Promise((resolve, reject) => { |
| img_1.onerror = reject; |
| img_1.onload = resolve; |
| }); |
| |
| const img_2_promise = new Promise((resolve, reject) => { |
| img_2.onerror = reject; |
| img_2.onload = resolve; |
| }); |
| |
| Promise.all([img_1_promise, img_2_promise]) |
| .then(t.step_func_done()) |
| .catch(t.unreached_func("The images should load successfully")); |
| |
| // Kick off the requests. |
| img_1.loading = 'eager'; |
| img_2.removeAttribute('loading'); // unset the attribute, putting it in |
| // the default (eager) state. |
| })); |
| |
| </script> |
| |
| <body> |
| <div style="height:1000vh;"></div> |
| <img id="img_1" |
| src="resources/image.png?1" |
| loading="lazy" onload="img_1_onload();"> |
| <img id="img_2" |
| src="resources/image.png?2" |
| loading="lazy" onload="img_2_onload();"> |
| </body> |