Skip to content

Commit 8ef24ae

Browse files
committed
优化顶栏移动端中
1 parent 0e5133a commit 8ef24ae

File tree

8 files changed

+39
-46
lines changed

8 files changed

+39
-46
lines changed

src/lib/ZHeader/ZHeader.svelte

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
*/
4545
let numOfSnippets = Object.keys(others).length;
4646
47+
let windowWidth = $state(0);
48+
49+
let userAgent = $derived(windowWidth > 768 ? 'PC' : 'Mobile');
50+
51+
let p = $derived(windowWidth > 768 ? 1 : 15);
52+
4753
/**
4854
* To save configs
4955
* */
@@ -78,25 +84,9 @@
7884
let copy = snippets
7985
.map((s) => s)
8086
.sort((a, b) => {
81-
const aStart = a.start.target * bodyWidth;
82-
const gapBase = (a.width + b.width) * 0.5;
8387
const gapActual =
8488
a.start.target * bodyWidth + 0.5 * a.width - b.start.target * bodyWidth - 0.5 * b.width;
85-
if (a === snippet) {
86-
if (aStart < gapBase - 8) {
87-
return -1;
88-
} else {
89-
return gapActual;
90-
}
91-
} else if (b === snippet) {
92-
if (gapActual < gapBase - 8) {
93-
return 1;
94-
} else {
95-
return gapActual;
96-
}
97-
} else {
98-
return gapActual
99-
}
89+
return gapActual;
10090
});
10191
const length = copy.reduce((acc, cur) => acc + cur.width, 0);
10292
const start = (bodyWidth - length) * 0.5;
@@ -151,6 +141,7 @@
151141
}, 501);
152142
});
153143
});
144+
$inspect(userAgent);
154145
$effect(() => {
155146
snippets[1].width;
156147
setTimeout(() => {
@@ -159,12 +150,14 @@
159150
});
160151
</script>
161152

153+
<svelte:window bind:innerWidth={windowWidth} />
154+
162155
<div id="rootHead">
163156
{#each snippets as snippet}
164157
<!-- svelte-ignore a11y_no_static_element_interactions -->
165158
<div
166159
class="headItem"
167-
style="left: {snippet.start.current * 100}%;"
160+
style="{userAgent === 'PC' ? 'left' : 'top'}: {snippet.start.current * 100 * p}%;"
168161
style:pointer-events={snippet.pointerEvents}
169162
class:actived={snippet.actived}
170163
bind:this={snippet.ele}

src/lib/ZNav/ZNav.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
border-radius: 0.7rem;
4141
backdrop-filter: blur(5px);
4242
background-color: var(--header-btn-bg-color);
43+
&:empty{
44+
display: none;
45+
}
4346
* {
4447
color: var(--header-text-color);
4548
}

src/lib/ZSibar/ZSibar.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<script>
22
import ZSbarContainer from './ZSbarContainer.svelte';
3-
import { displays } from '$lib/shared.svelte';
43
import {leftDisplay} from '$lib/shared.svelte';
54
65
import { slide } from 'svelte/transition';

src/lib/ZTopBar/ZTopBar.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script>
2-
import { displays } from '$lib/shared.svelte';
2+
import { rightDisplay } from '$lib/shared.svelte';
33
import { leftDisplay } from '$lib/shared.svelte';
44
import ZBlurBtn from '$lib/ZBlurBtn/ZBlurBtn.svelte';
55
import ZIcon from '$lib/ZIcon/ZIcon.svelte';
@@ -36,7 +36,7 @@
3636
<ZBlurBtn
3737
style={'transform: rotateY(180deg);'}
3838
onclick={() => {
39-
displays.displayToc = !displays.displayToc;
39+
rightDisplay.displayToc = !rightDisplay.displayToc;
4040
}}
4141
>
4242
<ZIcon option={'layout'} />

src/lib/shared.svelte.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
/**
2-
* @property {boolean} display - Indicate sidebar's display.
32
* @property {boolean} displayToc - Indicate right sidebar's display.
43
*/
5-
export const displays = $state({
6-
display: false,
4+
export const rightDisplay = $state({
75
displayToc: false
86
});
97

src/routes/+layout.svelte

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import { slide } from 'svelte/transition';
1111
import { afterNavigate } from '$app/navigation';
1212
import { page } from '$app/stores';
13-
import { displays } from '$lib/shared.svelte.js';
13+
import { rightDisplay } from '$lib/shared.svelte.js';
1414
import { leftDisplay } from '$lib/shared.svelte.js';
1515
import ZSibar from '$lib/ZSibar/ZSibar.svelte';
1616
import ZSidebar from '$lib/ZSibar/ZSidebar.svelte';
@@ -58,9 +58,9 @@
5858
let moblieSidebar = $state();
5959
6060
/**
61-
* @type {object} - Snapshot of `displays`.
61+
* @type {object} - Snapshot of `rightDisplay`.
6262
*/
63-
let { display, displayToc } = $state(displays);
63+
let { displayToc } = $state(rightDisplay);
6464
6565
// Scroll header while scrolling.
6666
let top = $state(0);
@@ -78,41 +78,42 @@
7878
onMount(() => {
7979
lastY = Y;
8080
81-
// Show sidebar if not in home page.
82-
if ($page.url.pathname !== '/') {
83-
displays.display = displays.displayToc = true;
84-
} else {
85-
display = displayToc = true;
86-
}
81+
// Show right sidebar if not in home page.
82+
$page.url.pathname !== '/'
83+
? (rightDisplay.displayToc = true)
84+
: (rightDisplay.displayToc = false);
8785
86+
// Hide left sidebar if in home page. Always hide mobile sidebar on start.
8887
leftDisplay.displayMobile = false;
89-
if ($page.url.pathname === '/') {
90-
leftDisplay.displayPC = false;
91-
} else {
92-
leftDisplay.displayPC = true;
93-
}
88+
$page.url.pathname === '/' ? (leftDisplay.displayPC = false) : (leftDisplay.displayPC = true);
9489
});
9590
9691
afterNavigate(() => {
9792
// get head elements passed to <ZTocList>.
9893
headings = document.querySelectorAll(titles);
9994
100-
// Reset `displays` when navigating between home and other pages.
95+
// Reset sidebars when navigating between home and other pages.
10196
if ($navigating && windowWidth >= 768) {
10297
const { from, to } = $navigating;
10398
if (from.url.pathname !== '/' && to.url.pathname === '/') {
104-
displayToc = displays.displayToc;
105-
displays.display = displays.displayToc = false;
99+
leftDisplay.displayPC = false;
100+
101+
// Save the current value of `displayToc` and set it to false.
102+
displayToc = rightDisplay.displayToc;
103+
rightDisplay.displayToc = false;
106104
} else if (from.url.pathname === '/' && to.url.pathname !== '/') {
107-
displays.displayToc = displayToc;
105+
leftDisplay.displayPC = true;
106+
107+
rightDisplay.displayToc = displayToc;
108108
}
109109
}
110110
});
111111
112112
$effect(() => {
113113
if (moblieSidebar) {
114+
removeEventListener('click', clickOutside);
114115
function clickOutside(e) {
115-
if (e.clientY > moblieSidebar.getBoundingClientRect().bottom) {
116+
if (e.clientY > moblieSidebar?.getBoundingClientRect().bottom) {
116117
leftDisplay.displayMobile = false;
117118
removeEventListener('click', clickOutside);
118119
}
@@ -172,7 +173,7 @@
172173
<div class="content">
173174
{@render children?.()}
174175
</div>
175-
{#if displays.displayToc}
176+
{#if rightDisplay.displayToc}
176177
<div class="toc">
177178
{#if headings && headings?.length}
178179
<div class="tocContainer" transition:slide|global={{ duration: 300, axis: 'x' }}>

src/routes/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
align-items: center;
2222
color: unset;
2323
text-decoration: unset;
24-
width: 84vw;
24+
width: 100%;
2525
border: 1px solid var(--home-border-color);
2626
border-radius: 3rem;
2727
font-size: 64px;

src/routes/docs/+layout.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<script>
2-
import { displays } from '$lib/shared.svelte';
32
/** @type {{ data: import('./$types').LayoutData, children: import('svelte').Snippet }} */
43
let { data, children } = $props();
54

0 commit comments

Comments
 (0)