@@ -28,6 +28,12 @@ function Gallery(element) {
2828 this . closeBtn = getElement ( '.close-btn' ) ;
2929
3030 // 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+
3137 // ref u can use this one
3238 let self = this ; //dia merujuk pada Gallery
3339 // ** Click
@@ -50,17 +56,23 @@ Gallery.prototype.openModal = function (selectedImage, list) {
5056 // *** invoke this.setMainImage
5157 this . setMainImage ( selectedImage ) ;
5258 // *** 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
5461 this . modalImages . innerHTML = list
5562 . map ( function ( image ) {
63+ // console.log(image);
5664 return `<img src="${
5765 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' } " />`;
5967 } )
6068 . join ( '' ) ;
61-
69+ // console.log(list); array img
6270 // *** invoke this.modal
6371 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 ) ;
6476} ;
6577
6678// for main-image, and image-name
@@ -70,6 +82,44 @@ Gallery.prototype.setMainImage = function (selectedImage) {
7082 this . imgName . textContent = selectedImage . title ;
7183} ;
7284
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+ } ;
73123// create new instance object
74124const nature = new Gallery ( getElement ( '.nature' ) ) ;
75125const city = new Gallery ( getElement ( '.city' ) ) ;
0 commit comments