Skip to content

Commit 3fd197f

Browse files
committed
feat: code by Trae: loading
1 parent fc51c75 commit 3fd197f

8 files changed

Lines changed: 136 additions & 33 deletions

File tree

epub_browser/assets/book.css

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,4 +584,41 @@ body {
584584
#clearReadingProgressBtn {
585585
font-size: 0.5rem;
586586
}
587+
}
588+
589+
/* 加载动画样式 */
590+
.loading-overlay {
591+
position: fixed;
592+
top: 0;
593+
left: 0;
594+
width: 100%;
595+
height: 100%;
596+
background-color: rgba(255, 255, 255, 1);
597+
display: flex;
598+
justify-content: center;
599+
align-items: center;
600+
z-index: 9999;
601+
}
602+
603+
.loading-spinner {
604+
width: 50px;
605+
height: 50px;
606+
border: 5px solid #f3f3f3;
607+
border-top: 5px solid var(--primary);
608+
border-radius: 50%;
609+
animation: spin 1s linear infinite;
610+
}
611+
612+
@keyframes spin {
613+
0% { transform: rotate(0deg); }
614+
100% { transform: rotate(360deg); }
615+
}
616+
617+
.dark-mode .loading-overlay {
618+
background-color: rgba(0, 0, 0, 1);
619+
}
620+
621+
.dark-mode .loading-spinner {
622+
border: 5px solid #333;
623+
border-top: 5px solid var(--primary);
587624
}

epub_browser/assets/book.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,19 @@ function initScript() {
223223
behavior: 'smooth'
224224
});
225225
});
226+
227+
// 隐藏加载动画
228+
function hideLoading() {
229+
const overlay = document.getElementById('loadingOverlay');
230+
if (overlay) {
231+
overlay.style.display = 'none';
232+
}
233+
}
234+
235+
// 延迟隐藏加载动画,确保页面完全渲染
236+
setTimeout(function() {
237+
hideLoading();
238+
}, 500);
226239
};
227240

228241
window.initScriptBook = initScript;

epub_browser/assets/chapter.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ body {
13681368
left: 0;
13691369
width: 100%;
13701370
height: 100%;
1371-
background-color: rgba(255, 255, 255, 0.95);
1371+
background-color: rgba(255, 255, 255, 1);
13721372
display: flex;
13731373
justify-content: center;
13741374
align-items: center;
@@ -1390,7 +1390,7 @@ body {
13901390
}
13911391

13921392
.dark-mode .loading-overlay {
1393-
background-color: rgba(0, 0, 0, 0.95);
1393+
background-color: rgba(0, 0, 0, 1);
13941394
}
13951395

13961396
.dark-mode .loading-spinner {

epub_browser/assets/chapter.js

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -305,19 +305,6 @@ async function scopeEBStyles(scopeSelector = '[data-eb-styles]') {
305305

306306

307307
function initScript() {
308-
// 创建加载动画元素
309-
function createLoadingOverlay() {
310-
const overlay = document.createElement('div');
311-
overlay.className = 'loading-overlay';
312-
overlay.id = 'loadingOverlay';
313-
314-
const spinner = document.createElement('div');
315-
spinner.className = 'loading-spinner';
316-
317-
overlay.appendChild(spinner);
318-
document.body.appendChild(overlay);
319-
}
320-
321308
// 显示加载动画
322309
function showLoading() {
323310
const overlay = document.getElementById('loadingOverlay');
@@ -333,10 +320,6 @@ function initScript() {
333320
overlay.style.display = 'none';
334321
}
335322
}
336-
337-
// 初始化加载动画
338-
createLoadingOverlay();
339-
showLoading();
340323

341324
// 样式重写,增加区域限定
342325
scopeEBStyles();
@@ -827,12 +810,6 @@ function initScript() {
827810

828811
// 加载阅读进度
829812
function loadReadingProgress() {
830-
if (totalPages === 0) {
831-
setTimeout(() => {
832-
loadReadingProgress();
833-
}, 100);
834-
return
835-
}
836813
if (isKindleMode()) {
837814
if (isPaginationMode) {
838815
showPage(0);
@@ -841,6 +818,14 @@ function initScript() {
841818
}
842819

843820
if (isPaginationMode) {
821+
// 翻页模式需要等待 totalPages 计算完成
822+
if (totalPages === 0) {
823+
setTimeout(() => {
824+
loadReadingProgress();
825+
}, 100);
826+
return
827+
}
828+
844829
// 翻页模式
845830
let storageKey = getStorageKey("turning");
846831
let savedPage = localStorage.getItem(storageKey);
@@ -857,7 +842,7 @@ function initScript() {
857842
showPage(0);
858843
}
859844
} else {
860-
// 滚动模式
845+
// 滚动模式不需要等待 totalPages
861846
let storageKey = getStorageKey("scroll");
862847
let savedPos = localStorage.getItem(storageKey);
863848
let windowHeight = window.innerHeight;
@@ -1360,16 +1345,20 @@ function initScript() {
13601345
}
13611346
});
13621347

1363-
// 页面加载完成后隐藏加载动画
1364-
window.addEventListener('load', function() {
1348+
// 自定义 css
1349+
customCssFunc();
1350+
1351+
// 根据模式决定何时隐藏加载动画
1352+
if (isPaginationMode) {
1353+
// 翻页模式:在 createPages 完成后隐藏 loading
1354+
// createPages 内部已经处理了 hideLoading
1355+
} else {
1356+
// 滚动模式:在 loadReadingProgress 完成后隐藏 loading
13651357
// 延迟隐藏加载动画,确保页面完全渲染
13661358
setTimeout(function() {
13671359
hideLoading();
1368-
}, 500);
1369-
});
1370-
1371-
// 自定义 css
1372-
customCssFunc();
1360+
}, 500); // 等待 loadReadingProgress 中的 setTimeout 完成
1361+
}
13731362

13741363
function customCssFunc() {
13751364
if (isKindleMode()) {

epub_browser/assets/library.css

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,4 +518,41 @@ body {
518518
.custom-css-notification.fade-out {
519519
opacity: 0;
520520
transform: translateY(-10px);
521+
}
522+
523+
/* 加载动画样式 */
524+
.loading-overlay {
525+
position: fixed;
526+
top: 0;
527+
left: 0;
528+
width: 100%;
529+
height: 100%;
530+
background-color: rgba(255, 255, 255, 1);
531+
display: flex;
532+
justify-content: center;
533+
align-items: center;
534+
z-index: 9999;
535+
}
536+
537+
.loading-spinner {
538+
width: 50px;
539+
height: 50px;
540+
border: 5px solid #f3f3f3;
541+
border-top: 5px solid var(--primary);
542+
border-radius: 50%;
543+
animation: spin 1s linear infinite;
544+
}
545+
546+
@keyframes spin {
547+
0% { transform: rotate(0deg); }
548+
100% { transform: rotate(360deg); }
549+
}
550+
551+
.dark-mode .loading-overlay {
552+
background-color: rgba(0, 0, 0, 1);
553+
}
554+
555+
.dark-mode .loading-spinner {
556+
border: 5px solid #333;
557+
border-top: 5px solid var(--primary);
521558
}

epub_browser/assets/library.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,19 @@ function initScript() {
419419
console.log('PWA installed successfully');
420420
});
421421

422+
// 隐藏加载动画
423+
function hideLoading() {
424+
const overlay = document.getElementById('loadingOverlay');
425+
if (overlay) {
426+
overlay.style.display = 'none';
427+
}
428+
}
429+
430+
// 延迟隐藏加载动画,确保页面完全渲染
431+
setTimeout(function() {
432+
hideLoading();
433+
}, 500);
434+
422435
};
423436

424437
// 如果DOM已经加载完成,立即初始化

epub_browser/library.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ def create_library_home(self):
151151
<link rel="stylesheet" href="/assets/library.css">
152152
</head>
153153
<body>
154+
<!-- 加载动画 -->
155+
<div class="loading-overlay" id="loadingOverlay">
156+
<div class="loading-spinner"></div>
157+
</div>
154158
"""
155159
all_tags = set()
156160
for book_hash, book_info in self.books.items():

epub_browser/processor.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,11 @@ def create_index_page(self):
425425
index_html += """
426426
</head>
427427
<body>
428+
<!-- 加载动画 -->
429+
<div class="loading-overlay" id="loadingOverlay">
430+
<div class="loading-spinner"></div>
431+
</div>
432+
428433
<div class="top-controls">
429434
<div class="theme-toggle" id="themeToggle">
430435
<i class="fas fa-moon"></i>
@@ -856,6 +861,11 @@ def create_chapter_template(self, content, style_links, chapter_index, chapter_t
856861
"""
857862
chapter_html +=f"""
858863
<body>
864+
<!-- 加载动画 -->
865+
<div class="loading-overlay" id="loadingOverlay">
866+
<div class="loading-spinner"></div>
867+
</div>
868+
859869
<div class="reading-progress-container">
860870
<div class="progress-bar" id="progressBar"></div>
861871
</div>

0 commit comments

Comments
 (0)