11let config ;
22let generatorInstance ;
33
4- // Ambil elemen yang sudah ada di HTML
54const container = document . getElementById ( 'dynamic-content' ) ;
65const titleText = document . getElementById ( 'title-text' ) ;
76const subtitleText = document . getElementById ( 'subtitle-text' ) ;
@@ -16,15 +15,14 @@ addEventListener('load', function() {
1615 . then ( json => {
1716 config = json ;
1817
19- // Isi teks dari config
18+ // Set konten teks
2019 titleText . textContent = config . appTitle ;
2120 subtitleText . textContent = config . appSubtitle ;
2221 startupMsg . textContent = config . messages . status . startup ;
2322
24- // Munculkan semua dengan halus setelah teks siap
25- titleText . classList . add ( 'fade-active' ) ;
26- subtitleText . classList . add ( 'fade-active' ) ;
27- container . classList . add ( 'fade-active' ) ;
23+ // Berikan efek fade-in hanya sekali saat pertama dimuat
24+ container . classList . add ( 'fade-in' ) ;
25+ document . querySelector ( '.header-identity' ) . classList . add ( 'fade-in' ) ;
2826
2927 lucide . createIcons ( ) ;
3028 initAppLogic ( ) ;
@@ -33,11 +31,8 @@ addEventListener('load', function() {
3331} ) ;
3432
3533function initAppLogic ( ) {
36- // Reset state jika dipanggil dari tombol reset
34+ // Kembalikan ke keadaan awal tanpa 'transition' berat
3735 dropZone . classList . remove ( 'no-border' ) ;
38- dropZone . onclick = ( ) => fileInput . click ( ) ;
39-
40- // Tampilkan kembali overlay startup
4136 dropZone . innerHTML = `
4237 <div class="status-overlay">
4338 <i data-lucide="image-plus"></i>
@@ -48,14 +43,14 @@ function initAppLogic() {
4843
4944 uiGroup . style . display = 'none' ;
5045 uiGroup . innerHTML = "" ;
46+ dropZone . onclick = ( ) => fileInput . click ( ) ;
5147
5248 fileInput . onchange = function ( ) {
5349 if ( this . files && this . files [ 0 ] ) processImage ( this . files [ 0 ] ) ;
5450 } ;
5551}
5652
5753function processImage ( file ) {
58- // Feedback proses
5954 dropZone . onclick = null ;
6055 dropZone . innerHTML = `
6156 <div class="status-overlay">
@@ -75,19 +70,19 @@ function processImage(file) {
7570 overlayImg . src = config . overlaySource ;
7671
7772 overlayImg . onload = ( ) => {
78- // Bersihkan zone dan masukkan canvas
73+ // Bersihkan zone dan pasang canvas
7974 dropZone . classList . add ( 'no-border' ) ;
8075 dropZone . innerHTML = "" ;
8176
8277 const canvas = document . createElement ( 'canvas' ) ;
8378 dropZone . appendChild ( canvas ) ;
8479
85- // Jalankan Generator Interaktif
80+ // Inisialisasi Generator (Interaksi harus ringan di sini)
8681 generatorInstance = new Generator ( canvas , { width : 1080 , height : 1080 } ) ;
8782 generatorInstance . setUserImage ( userImg ) ;
8883 generatorInstance . setOverlayImage ( overlayImg ) ;
8984
90- // Setup Tombol dengan halus
85+ // Tampilkan kontrol
9186 uiGroup . style . display = 'flex' ;
9287 uiGroup . innerHTML = "" ;
9388
@@ -104,14 +99,7 @@ function processImage(file) {
10499 const btnRe = document . createElement ( 'button' ) ;
105100 btnRe . className = 'btn-reset' ;
106101 btnRe . innerHTML = `<i data-lucide="refresh-cw"></i> ${ config . messages . buttons . newImage } ` ;
107- btnRe . onclick = ( ) => {
108- // Animasi transisi saat reset
109- container . classList . remove ( 'fade-active' ) ;
110- setTimeout ( ( ) => {
111- initAppLogic ( ) ;
112- container . classList . add ( 'fade-active' ) ;
113- } , 300 ) ;
114- } ;
102+ btnRe . onclick = ( ) => initAppLogic ( ) ; // Reset instan agar enteng
115103
116104 uiGroup . appendChild ( btnDl ) ;
117105 uiGroup . appendChild ( btnRe ) ;
0 commit comments