Skip to content

Commit 13bf9e2

Browse files
committed
Add pseudo top progress indicator
1 parent 369c45e commit 13bf9e2

File tree

2 files changed

+62
-22
lines changed

2 files changed

+62
-22
lines changed

.vitepress/theme/components/PageLoader.vue

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,51 +12,89 @@
1212
before = () => { visible.value = true }
1313
after = () => {
1414
// Small delay to ensure rendering is done
15-
setTimeout(() => { visible.value = false }, 10)
15+
setTimeout(() => { visible.value = false }, 100)
1616
}
1717
router.onBeforeRouteChange = before
1818
router.onAfterRouteChange = after
1919
})
2020
2121
onUnmounted(() => {
2222
if (router.onBeforeRouteChange === before) {
23-
router.onBeforeRouteChange = null
23+
router.onBeforeRouteChange = undefined
2424
}
2525
if (router.onAfterRouteChange === after) {
26-
router.onAfterRouteChange = null
26+
router.onAfterRouteChange = undefined
2727
}
2828
})
2929
</script>
3030

3131
<template>
3232
<transition name="fade">
3333
<div v-if="visible" class="page-loader">
34-
<div class="loader-spinner"></div>
34+
<div class="page-loader-bar"></div>
3535
</div>
3636
</transition>
3737
</template>
3838

3939
<style scoped>
40-
.page-loader {
41-
position: fixed;
42-
inset: 0;
43-
background: rgba(0, 0, 0, 0.3);
44-
display: flex;
45-
justify-content: center;
46-
align-items: center;
47-
z-index: 9999;
48-
}
40+
.page-loader-bar {
41+
position: fixed;
42+
top: 0;
43+
width: 100%;
44+
height: 2px;
45+
background-clip: padding-box;
46+
overflow: hidden;
47+
z-index: 1000;
48+
}
49+
50+
.page-loader-bar::before,
51+
.page-loader-bar::after {
52+
content: "";
53+
position: absolute;
54+
will-change: left, right;
55+
top: 0;
56+
left: 0;
57+
bottom: 0;
58+
background-color: var(--cake-color-progress);
59+
}
60+
61+
.page-loader-bar::before {
62+
animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
63+
}
64+
65+
.page-loader-bar::after {
66+
content: "";
67+
animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
68+
animation-delay: 1.15s;
69+
}
4970
50-
.loader-spinner {
51-
width: 48px;
52-
height: 48px;
53-
border: 4px solid #ccc;
54-
border-top-color: var(--vp-c-brand-1);
55-
border-radius: 50%;
56-
animation: spin 1s linear infinite;
71+
@keyframes indeterminate {
72+
0% {
73+
left: -35%;
74+
right: 100%;
5775
}
76+
60% {
77+
left: 100%;
78+
right: -90%;
79+
}
80+
100% {
81+
left: 100%;
82+
right: -90%;
83+
}
84+
}
5885
59-
@keyframes spin {
60-
to { transform: rotate(360deg); }
86+
@keyframes indeterminate-short {
87+
0% {
88+
left: -200%;
89+
right: 100%;
90+
}
91+
60% {
92+
left: 107%;
93+
right: -8%;
94+
}
95+
100% {
96+
left: 107%;
97+
right: -8%;
6198
}
99+
}
62100
</style>

.vitepress/theme/custom.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* CakePHP Theme Customization */
22
:root {
33
--cake-color-link: #2D7EA4;
4+
--cake-color-progress: #d33c43;
45

56
--vp-font-family-base: 'Raleway', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
67

@@ -14,6 +15,7 @@
1415
--vp-c-red-1: #d33c43;
1516
--vp-c-red-2: #c8363d;
1617
--vp-c-red-3: #b02e34;
18+
1719
}
1820

1921
/* Dark theme adjustments */

0 commit comments

Comments
 (0)