vericudebuget commited on
Commit
0b89fed
·
verified ·
1 Parent(s): d98b2c2

Update reader.html

Browse files
Files changed (1) hide show
  1. reader.html +100 -40
reader.html CHANGED
@@ -69,22 +69,20 @@
69
  background-color: #0056b3;
70
  }
71
 
72
-
73
  #page-input {
74
- position: absolute;
75
- top: 20px;
76
- font-size: 24px;
77
- padding: 10px 20px;
78
- border: none;
79
- border-radius: 10px;
80
- text-align: center;
81
- z-index: 1;
82
- width: 200px;
83
- @media (orientation: portrait) {
84
- transform: translate(30px, 0px);
85
  }
86
  }
87
-
88
 
89
  #page-input:focus {
90
  outline: none;
@@ -119,7 +117,7 @@
119
  <div id="reader-container">
120
  <div id="page-number"></div>
121
  <input id="page-input" type="number" placeholder="Introdu pagina" oninput="handlePageInput(this.value)">
122
- <img id="page-image" src="pages/1.jpg" alt="Pagina 1" loading="eager" style="display: none;">
123
  <div id="loading-message">Imaginea se încarcă, vă rog așteptați</div>
124
  </div>
125
 
@@ -137,18 +135,6 @@
137
  const pageNumberElement = document.getElementById('page-number');
138
  const loadingMessage = document.getElementById('loading-message');
139
 
140
- const preloadImages = [];
141
-
142
- const preload = (pages) => {
143
- pages.forEach(page => {
144
- if (page >= 1 && page <= TOTAL_PAGES) {
145
- const img = new Image();
146
- img.src = `pages/${page}.jpg`;
147
- preloadImages.push(img);
148
- }
149
- });
150
- };
151
-
152
  const updatePage = () => {
153
  imageElement.src = `pages/${currentPage}.jpg`;
154
  imageElement.alt = `Pagina ${currentPage}`;
@@ -158,13 +144,6 @@
158
  pageNumberElement.textContent = `${pageNumber - 1}-${pageNumber}`;
159
  imageElement.style.display = 'none';
160
  loadingMessage.style.display = 'block';
161
-
162
- const pagesToPreload = [
163
- currentPage - 1, currentPage, currentPage + 1,
164
- currentPage + 2, currentPage + 3,
165
- currentPage - 2, currentPage - 3
166
- ];
167
- preload(pagesToPreload.filter(page => page >= 1 && page <= TOTAL_PAGES));
168
  };
169
 
170
  imageElement.onload = () => {
@@ -186,14 +165,97 @@
186
  }
187
  });
188
 
189
- document.addEventListener('keydown', (e) => {
190
- if (e.key === 'ArrowLeft') {
191
- prevButton.click();
192
- } else if (e.key === 'ArrowRight') {
193
- nextButton.click();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  }
195
  });
196
 
 
 
 
 
197
  function handlePageInput(value) {
198
  const pageNumber = parseInt(value);
199
  if (!isNaN(pageNumber)) {
@@ -203,8 +265,6 @@
203
  currentPage = (pageNumber - 1) / 2;
204
  }
205
  updatePage();
206
-
207
-
208
  }
209
  }
210
 
 
69
  background-color: #0056b3;
70
  }
71
 
 
72
  #page-input {
73
+ position: absolute;
74
+ top: 20px;
75
+ font-size: 24px;
76
+ padding: 10px 20px;
77
+ border: none;
78
+ border-radius: 10px;
79
+ text-align: center;
80
+ z-index: 1;
81
+ width: 190px;
82
+ @media (orientation: portrait) {
83
+ transform: translate(30px, 0px);
84
  }
85
  }
 
86
 
87
  #page-input:focus {
88
  outline: none;
 
117
  <div id="reader-container">
118
  <div id="page-number"></div>
119
  <input id="page-input" type="number" placeholder="Introdu pagina" oninput="handlePageInput(this.value)">
120
+ <img id="page-image" src="pages/1.jpg" alt="Pagina 1" style="display: none;">
121
  <div id="loading-message">Imaginea se încarcă, vă rog așteptați</div>
122
  </div>
123
 
 
135
  const pageNumberElement = document.getElementById('page-number');
136
  const loadingMessage = document.getElementById('loading-message');
137
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  const updatePage = () => {
139
  imageElement.src = `pages/${currentPage}.jpg`;
140
  imageElement.alt = `Pagina ${currentPage}`;
 
144
  pageNumberElement.textContent = `${pageNumber - 1}-${pageNumber}`;
145
  imageElement.style.display = 'none';
146
  loadingMessage.style.display = 'block';
 
 
 
 
 
 
 
147
  };
148
 
149
  imageElement.onload = () => {
 
165
  }
166
  });
167
 
168
+ let scale = 1;
169
+ const zoomStep = 0.1;
170
+ const maxScale = 3;
171
+ const minScale = 1;
172
+ let translateX = 0;
173
+ let translateY = 0;
174
+
175
+ const zoom = (delta) => {
176
+ scale = Math.min(maxScale, Math.max(minScale, scale + delta));
177
+ applyTransform();
178
+ };
179
+
180
+ const applyTransform = () => {
181
+ imageElement.style.transform = `scale(${scale}) translate(${translateX}px, ${translateY}px)`;
182
+ };
183
+
184
+ imageElement.addEventListener('wheel', (e) => {
185
+ e.preventDefault();
186
+ zoom(e.deltaY < 0 ? zoomStep : -zoomStep);
187
+ });
188
+
189
+ let startX = 0;
190
+ let startY = 0;
191
+ let isDragging = false;
192
+
193
+ imageElement.addEventListener('mousedown', (e) => {
194
+ e.preventDefault();
195
+ startX = e.clientX;
196
+ startY = e.clientY;
197
+ isDragging = true;
198
+ imageElement.style.cursor = 'grabbing';
199
+ });
200
+
201
+ window.addEventListener('mousemove', (e) => {
202
+ if (isDragging) {
203
+ const dx = e.clientX - startX;
204
+ const dy = e.clientY - startY;
205
+ translateX += dx / scale;
206
+ translateY += dy / scale;
207
+ startX = e.clientX;
208
+ startY = e.clientY;
209
+ applyTransform();
210
+ }
211
+ });
212
+
213
+ window.addEventListener('mouseup', () => {
214
+ isDragging = false;
215
+ imageElement.style.cursor = 'grab';
216
+ });
217
+
218
+ let touchStartDistance = 0;
219
+ imageElement.addEventListener('touchstart', (e) => {
220
+ if (e.touches.length === 2) {
221
+ e.preventDefault();
222
+ touchStartDistance = Math.hypot(
223
+ e.touches[0].clientX - e.touches[1].clientX,
224
+ e.touches[0].clientY - e.touches[1].clientY
225
+ );
226
+ } else if (e.touches.length === 1) {
227
+ startX = e.touches[0].clientX;
228
+ startY = e.touches[0].clientY;
229
+ isDragging = true;
230
+ }
231
+ });
232
+
233
+ imageElement.addEventListener('touchmove', (e) => {
234
+ if (e.touches.length === 2) {
235
+ e.preventDefault();
236
+ const currentDistance = Math.hypot(
237
+ e.touches[0].clientX - e.touches[1].clientX,
238
+ e.touches[0].clientY - e.touches[1].clientY
239
+ );
240
+ const delta = (currentDistance - touchStartDistance) / 100;
241
+ zoom(delta);
242
+ touchStartDistance = currentDistance;
243
+ } else if (e.touches.length === 1 && isDragging) {
244
+ e.preventDefault();
245
+ const dx = e.touches[0].clientX - startX;
246
+ const dy = e.touches[0].clientY - startY;
247
+ translateX += dx / scale;
248
+ translateY += dy / scale;
249
+ startX = e.touches[0].clientX;
250
+ startY = e.touches[0].clientY;
251
+ applyTransform();
252
  }
253
  });
254
 
255
+ imageElement.addEventListener('touchend', () => {
256
+ isDragging = false;
257
+ });
258
+
259
  function handlePageInput(value) {
260
  const pageNumber = parseInt(value);
261
  if (!isNaN(pageNumber)) {
 
265
  currentPage = (pageNumber - 1) / 2;
266
  }
267
  updatePage();
 
 
268
  }
269
  }
270