@@ -28,6 +28,12 @@ function Gallery(element) {
28
28
this . closeBtn = getElement ( '.close-btn' ) ;
29
29
30
30
// Bind function
31
+ // pointing to Gallery
32
+ this . closeModal = this . closeModal . bind ( this ) ;
33
+ this . prevImage = this . prevImage . bind ( this ) ;
34
+ this . nextImage = this . nextImage . bind ( this ) ;
35
+ this . chooseImage = this . chooseImage . bind ( this ) ;
36
+
31
37
// ref u can use this one
32
38
let self = this ; //dia merujuk pada Gallery
33
39
// ** Click
@@ -50,17 +56,23 @@ Gallery.prototype.openModal = function (selectedImage, list) {
50
56
// *** invoke this.setMainImage
51
57
this . setMainImage ( selectedImage ) ;
52
58
// *** map modalImages
53
- // show display modal-image
59
+ // menampilkan gambar yg diklik dibawah agar muncul sesuai ururat
60
+ // jadi gambar yg diklik ada ikut juga dibawah
54
61
this . modalImages . innerHTML = list
55
62
. map ( function ( image ) {
63
+ // console.log(image);
56
64
return `<img src="${
57
65
image . src
58
- } " title="${ image . title } " data-id="${ image . dataset . id } " class="${ selectedImage . dataset . id === image . dataset . id ? 'modal-img selected' : 'modal-img' } "/>`;
66
+ } " title="${ image . title } " data-id="${ image . dataset . id } " class="${ selectedImage . dataset . id === image . dataset . id ? 'modal-img selected' : 'modal-img' } " />`;
59
67
} )
60
68
. join ( '' ) ;
61
-
69
+ // console.log(list); array img
62
70
// *** invoke this.modal
63
71
this . modal . classList . add ( 'open' ) ;
72
+ this . closeBtn . addEventListener ( 'click' , this . closeModal ) ;
73
+ this . prevBtn . addEventListener ( 'click' , this . prevImage ) ;
74
+ this . nextBtn . addEventListener ( 'click' , this . nextImage ) ;
75
+ this . modalImages . addEventListener ( 'click' , this . chooseImage ) ;
64
76
} ;
65
77
66
78
// for main-image, and image-name
@@ -70,6 +82,44 @@ Gallery.prototype.setMainImage = function (selectedImage) {
70
82
this . imgName . textContent = selectedImage . title ;
71
83
} ;
72
84
85
+ Gallery . prototype . closeModal = function ( ) {
86
+ // close modal
87
+ this . modal . classList . remove ( 'open' ) ;
88
+ this . closeBtn . removeEventListener ( 'click' , this . closeModal ) ;
89
+ this . prevBtn . removeEventListener ( 'click' , this . prevImage ) ;
90
+ this . nextBtn . removeEventListener ( 'click' , this . nextImage ) ;
91
+ } ;
92
+
93
+ // for nextImage mainImg yang dipilih
94
+ Gallery . prototype . nextImage = function ( ) {
95
+ const selected = this . modalImages . querySelector ( '.selected' ) ;
96
+ const next =
97
+ selected . nextElementSibling || this . modalImages . firstElementChild ;
98
+ selected . classList . remove ( 'selected' ) ;
99
+ next . classList . add ( 'selected' ) ;
100
+ this . setMainImage ( next ) ;
101
+ } ;
102
+
103
+ Gallery . prototype . prevImage = function ( ) {
104
+ const selected = this . modalImages . querySelector ( '.selected' ) ;
105
+ const prev = selected . previousSibling || this . modalImages . lastChild ;
106
+ selected . classList . remove ( 'selected' ) ;
107
+ prev . classList . add ( 'selected' ) ;
108
+ this . setMainImage ( prev ) ;
109
+ } ;
110
+
111
+ // for Choose Image
112
+ Gallery . prototype . chooseImage = function ( e ) {
113
+ const selected = this . modalImages . querySelector ( '.selected' ) ;
114
+ // jika target sama dgn modal-img
115
+ //
116
+ if ( e . target . classList . contains ( 'modal-img' ) ) {
117
+ // console.log(e.target); check gambar dibawah maka hasilnya adalah sesuai dgn gambar diklik
118
+ selected . classList . remove ( 'selected' ) ;
119
+ this . setMainImage ( e . target ) ;
120
+ e . target . classList . add ( 'selected' ) ;
121
+ }
122
+ } ;
73
123
// create new instance object
74
124
const nature = new Gallery ( getElement ( '.nature' ) ) ;
75
125
const city = new Gallery ( getElement ( '.city' ) ) ;
0 commit comments