-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
84 lines (49 loc) · 1.63 KB
/
app.js
File metadata and controls
84 lines (49 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const numPhotos = 10;
const apiURL = `https://dog.ceo/api/breeds/image/random/${numPhotos}`;
const photoContainer = document.querySelector(".photo-container");
const loaderContainer = document.querySelector(".loader");
const photoViewerTemplate = document.getElementById("photoViewer");
class PhotoHandler {
photoArray = [];
photoViewer() {
loaderContainer.classList.remove("loader-custom-height");
loaderContainer.classList.add("loader-auto-height");
this.photoArray.map((photo) => {
const imgElement = photoViewerTemplate.content.firstElementChild.cloneNode(true);
imgElement.setAttribute("src", photo);
imgElement.setAttribute("alt", "preview");
photoContainer.append(imgElement);
});
}
async getPhotos() {
const response = await fetch(apiURL);
const jsonResponse = await response.json();
this.photoArray = jsonResponse.message;
this.photoViewer();
}
}
function intersectionCallback(entries, observer) {
entries.forEach((entry) => {
if ( entry.isIntersecting ) {
const photoHandler = new PhotoHandler();
photoHandler.getPhotos();
}
});
}
class IntersectionHandler {
static observer() {
let options = {
root: null,
rootMargin: '0px',
threshold: .5
};
let observer = new IntersectionObserver(intersectionCallback, options);
observer.observe(loaderContainer);
}
}
class Main {
static run() {
IntersectionHandler.observer();
}
}
Main.run();