Skip to content

Commit ddcac0c

Browse files
committed
novo exe sobre api dom content loading resources onload e onerror
1 parent 09fa528 commit ddcac0c

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<!DOCTYPE html>
2+
<html lang="en-us">
3+
<head>
4+
<meta charset="UTF-8"/>
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
</head>
7+
<body>
8+
9+
<script type="text/javascript">
10+
/**
11+
* Normalmente, as imagens são carregadas quando são criadas. Portanto, quando adicionamos <img> à página, o usuário não vê a imagem imediatamente. O navegador precisa carregá-lo primeiro.
12+
*
13+
* Para mostrar uma imagem imediatamente, podemos criá-la “com antecedência”, assim:
14+
*/
15+
16+
//let img = document.createElement('img');
17+
//img.src = 'my.jpg';
18+
19+
/**
20+
* O navegador começa a carregar a imagem e a lembra no cache. Mais tarde, quando a mesma imagem aparece no documento (não importa como), ela aparece imediatamente.
21+
*
22+
* Crie uma função preloadImages(sources, callback) que carregue todas as imagens do array source se, quando estiver pronta, execute callback
23+
*
24+
* Por exemplo, isso mostrará alert depois que as imagens forem carregadas:
25+
*/
26+
27+
//function loaded() {
28+
// alert("Images loaded")
29+
//}
30+
31+
//preloadImages(["1.jpg", "2.jpg", "3.jpg"], loaded);
32+
33+
/**
34+
* Em caso de erro, a função ainda deve assumir a imagem “carregada”.
35+
*
36+
* Em outras palavras, o callback é executado quando todas as imagens são carregadas ou com erros.
37+
*
38+
* A função é útil, por exemplo, quando planejamos mostrar uma galeria com muitas imagens roláveis ​​e queremos ter certeza de que todas as imagens serão carregadas.
39+
*
40+
* No documento fonte você encontra links para imagens de teste, e também o código para verificar se elas estão carregadas ou não. Deve dar saída 300.
41+
*/
42+
43+
function preloadImages(sources, callback) {
44+
let counter = 0;
45+
function contador() {
46+
if(counter === sources.length)
47+
callback();
48+
}
49+
sources.forEach(img => {
50+
let imgElem = document.createElement("img");
51+
imgElem.src = img;
52+
//so chamar callback quando as três img estiverm carregadas
53+
imgElem.onload = function(event) {
54+
counter++;
55+
contador();
56+
};
57+
imgElem.onerror = function(event) {
58+
callback();
59+
};
60+
});
61+
62+
}
63+
64+
// ---------- The test ----------
65+
66+
let sources = [
67+
"https://en.js.cx/images-load/1.jpg",
68+
"https://en.js.cx/images-load/2.jpg",
69+
"https://en.js.cx/images-load/3.jpg"
70+
];
71+
72+
//adicione caracteres aleatórios para evitar o cache do navegador
73+
for (let i = 0; i < sources.length; i++) {
74+
sources[i] += '?' + Math.random();
75+
}
76+
77+
// para cada imagem,
78+
// vamos criar outra img com o mesmo src e verificar se temos sua largura imediatamente
79+
function testLoaded() {
80+
let widthSum = 0;
81+
for (let i = 0; i < sources.length; i++) {
82+
let img = document.createElement('img');
83+
img.src = sources[i];
84+
widthSum += img.width;
85+
}
86+
alert(widthSum);
87+
}
88+
89+
// cada imagem é 100x100, a largura total deve ser 300
90+
preloadImages(sources, testLoaded);
91+
</script>
92+
</body>
93+
</html>

0 commit comments

Comments
 (0)