vericudebuget commited on
Commit
3465e00
·
verified ·
1 Parent(s): 72116b3

Update reader.html

Browse files
Files changed (1) hide show
  1. reader.html +48 -51
reader.html CHANGED
@@ -26,24 +26,16 @@
26
  align-items: center;
27
  }
28
 
29
- #page-image, #next-page-image {
30
- position: absolute;
31
  width: 100%;
32
  height: auto;
33
  transform-origin: center center;
34
- transition: opacity 0.2s ease;
35
  cursor: grab;
36
- opacity: 1;
37
- z-index: 1;
38
- }
39
-
40
- #next-page-image {
41
- opacity: 0;
42
- z-index: 0;
43
  }
44
 
45
  @media (min-width: 768px) {
46
- #page-image, #next-page-image {
47
  height: 90vh;
48
  width: auto;
49
  }
@@ -122,8 +114,7 @@
122
  <div id="reader-container">
123
  <div id="page-number"></div>
124
  <input id="page-input" type="number" placeholder="Introdu pagina" oninput="handlePageInput(this.value)">
125
- <img id="page-image" src="pages/1.jpg" alt="Pagina 1">
126
- <img id="next-page-image" src="" alt="" style="display: none;">
127
  <div id="loading-message">Imaginea se încarcă, vă rog așteptați</div>
128
  </div>
129
 
@@ -135,76 +126,82 @@
135
  <script>
136
  const TOTAL_PAGES = 92;
137
  let currentPage = 1;
138
- const currentImageElement = document.getElementById('page-image');
139
- const nextPageImageElement = document.getElementById('next-page-image');
140
  const prevButton = document.getElementById('prev-button');
141
  const nextButton = document.getElementById('next-button');
142
  const pageNumberElement = document.getElementById('page-number');
143
  const loadingMessage = document.getElementById('loading-message');
144
 
145
- // Function to update the displayed page with cross-fade
146
- const updatePage = (newPage) => {
147
- currentPage = newPage;
 
 
 
 
 
 
 
 
 
 
 
 
148
  prevButton.disabled = currentPage === 1;
149
  nextButton.disabled = currentPage === TOTAL_PAGES;
150
-
151
  const pageNumber = currentPage * 2 + 1;
152
  pageNumberElement.textContent = `${pageNumber - 1}-${pageNumber}`;
 
 
 
 
 
 
 
 
 
 
153
 
154
- // Load the new image into the next image element
155
- nextPageImageElement.src = `pages/${currentPage}.jpg`;
156
- nextPageImageElement.alt = `Pagina ${currentPage}`;
157
-
158
- // Start the cross-fade transition
159
- currentImageElement.style.opacity = '0';
160
- nextPageImageElement.style.opacity = '1';
161
- nextPageImageElement.style.zIndex = '2';
162
-
163
- setTimeout(() => {
164
- // Swap the images
165
- [currentImageElement.src, nextPageImageElement.src] = [nextPageImageElement.src, ''];
166
- currentImageElement.style.opacity = '1';
167
- currentImageElement.style.zIndex = '1';
168
- nextPageImageElement.style.opacity = '0';
169
- nextPageImageElement.style.zIndex = '0';
170
- }, 200); // Match the transition duration (0.2s)
171
  };
172
 
173
- // Event listeners for buttons
174
  prevButton.addEventListener('click', () => {
175
  if (currentPage > 1) {
176
- updatePage(currentPage - 1);
 
177
  }
178
  });
179
 
180
  nextButton.addEventListener('click', () => {
181
  if (currentPage < TOTAL_PAGES) {
182
- updatePage(currentPage + 1);
 
183
  }
184
  });
185
 
186
- // Keyboard navigation
187
- window.addEventListener('keydown', (e) => {
188
- if (e.key === 'ArrowLeft' && !prevButton.disabled) {
189
  prevButton.click();
190
- } else if (e.key === 'ArrowRight' && !nextButton.disabled) {
191
  nextButton.click();
192
  }
193
  });
194
 
195
- // Handle page input
196
  function handlePageInput(value) {
197
  const pageNumber = parseInt(value);
198
  if (!isNaN(pageNumber)) {
199
- let newPage = Math.ceil(pageNumber / 2);
200
- if (newPage < 1) newPage = 1;
201
- if (newPage > TOTAL_PAGES) newPage = TOTAL_PAGES;
202
- updatePage(newPage);
 
 
203
  }
204
  }
205
 
206
- // Initialize the first page
207
- updatePage(1);
208
  </script>
209
  </body>
210
- </html>
 
26
  align-items: center;
27
  }
28
 
29
+ #reader-container img {
 
30
  width: 100%;
31
  height: auto;
32
  transform-origin: center center;
33
+ transition: transform 0.3s;
34
  cursor: grab;
 
 
 
 
 
 
 
35
  }
36
 
37
  @media (min-width: 768px) {
38
+ #reader-container img {
39
  height: 90vh;
40
  width: auto;
41
  }
 
114
  <div id="reader-container">
115
  <div id="page-number"></div>
116
  <input id="page-input" type="number" placeholder="Introdu pagina" oninput="handlePageInput(this.value)">
117
+ <img id="page-image" src="pages/1.jpg" alt="Pagina 1" loading="eager" style="display: none;">
 
118
  <div id="loading-message">Imaginea se încarcă, vă rog așteptați</div>
119
  </div>
120
 
 
126
  <script>
127
  const TOTAL_PAGES = 92;
128
  let currentPage = 1;
129
+ const imageElement = document.getElementById('page-image');
 
130
  const prevButton = document.getElementById('prev-button');
131
  const nextButton = document.getElementById('next-button');
132
  const pageNumberElement = document.getElementById('page-number');
133
  const loadingMessage = document.getElementById('loading-message');
134
 
135
+ const preloadImages = [];
136
+
137
+ const preload = (pages) => {
138
+ pages.forEach(page => {
139
+ if (page >= 1 && page <= TOTAL_PAGES) {
140
+ const img = new Image();
141
+ img.src = `pages/${page}.jpg`;
142
+ preloadImages.push(img);
143
+ }
144
+ });
145
+ };
146
+
147
+ const updatePage = () => {
148
+ imageElement.src = `pages/${currentPage}.jpg`;
149
+ imageElement.alt = `Pagina ${currentPage}`;
150
  prevButton.disabled = currentPage === 1;
151
  nextButton.disabled = currentPage === TOTAL_PAGES;
 
152
  const pageNumber = currentPage * 2 + 1;
153
  pageNumberElement.textContent = `${pageNumber - 1}-${pageNumber}`;
154
+ imageElement.style.display = 'none';
155
+ loadingMessage.style.display = 'block';
156
+
157
+ const pagesToPreload = [
158
+ currentPage - 1, currentPage, currentPage + 1,
159
+ currentPage + 2, currentPage + 3,
160
+ currentPage - 2, currentPage - 3
161
+ ];
162
+ preload(pagesToPreload.filter(page => page >= 1 && page <= TOTAL_PAGES));
163
+ };
164
 
165
+ imageElement.onload = () => {
166
+ imageElement.style.display = 'block';
167
+ loadingMessage.style.display = 'none';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  };
169
 
 
170
  prevButton.addEventListener('click', () => {
171
  if (currentPage > 1) {
172
+ currentPage--;
173
+ updatePage();
174
  }
175
  });
176
 
177
  nextButton.addEventListener('click', () => {
178
  if (currentPage < TOTAL_PAGES) {
179
+ currentPage++;
180
+ updatePage();
181
  }
182
  });
183
 
184
+ document.addEventListener('keydown', (e) => {
185
+ if (e.key === 'ArrowLeft') {
 
186
  prevButton.click();
187
+ } else if (e.key === 'ArrowRight') {
188
  nextButton.click();
189
  }
190
  });
191
 
 
192
  function handlePageInput(value) {
193
  const pageNumber = parseInt(value);
194
  if (!isNaN(pageNumber)) {
195
+ if (pageNumber % 2 === 0) {
196
+ currentPage = pageNumber / 2;
197
+ } else {
198
+ currentPage = (pageNumber - 1) / 2;
199
+ }
200
+ updatePage();
201
  }
202
  }
203
 
204
+ updatePage();
 
205
  </script>
206
  </body>
207
+ </html>