Skip to content

Commit d2c7615

Browse files
committed
feat: add the scrollRestoration option to control whether the page returns to the last scroll position after refreshing.
1 parent 0327858 commit d2c7615

File tree

7 files changed

+419
-169
lines changed

7 files changed

+419
-169
lines changed

packages/docs/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"preview": "vitepress preview"
1414
},
1515
"devDependencies": {
16-
"vitepress": "^1.5.0",
16+
"vitepress": "^1.6.1",
1717
"vitepress-theme-mild": "workspace:*"
1818
}
1919
}

packages/theme/index.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,18 @@ const MildTheme: Theme = {
3838
}
3939

4040
if (!(import.meta as any).env.SSR) {
41-
if (!(import.meta as any).env.DEV) {
42-
setTimeout(() => {
43-
window.scrollTo(0, 0);
44-
}, 300);
41+
if (!themeConfig.scrollRestoration) {
42+
if ('scrollRestoration' in history) {
43+
history.scrollRestoration = 'manual';
44+
}
4545
}
46+
47+
else {
48+
if ('scrollRestoration' in history) {
49+
history.scrollRestoration = 'auto';
50+
}
51+
}
52+
4653
if ((import.meta as any).hot) {
4754
let scrollPosition = 0;
4855
// 监听热模块替换之前的事件

packages/theme/src/client/styles/index.scss

+1-100
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
@import './variable.css';
22
@import 'nprogress/nprogress.css';
3+
@import './slide-enter.css';
34

45
.n-image-preview-container {
56
.n-image-preview-toolbar {
@@ -117,103 +118,3 @@
117118
background: var(--vp-c-brand); /* 修改进度条的颜色 */
118119
}
119120
}
120-
121-
@keyframes slide-enter {
122-
0% {
123-
transform: translateY(10px);
124-
opacity: 0;
125-
}
126-
127-
to {
128-
transform: translateY(0);
129-
opacity: 100;
130-
}
131-
}
132-
133-
@media (prefers-reduced-motion: no-preference) {
134-
[slide-enter],
135-
.slide-enter,
136-
.slide-enter-content > * {
137-
--enter-stage: 0;
138-
--enter-step: 150ms;
139-
--enter-initial: 0ms;
140-
animation: slide-enter 1s both 1;
141-
animation-delay: calc(var(--enter-initial) + var(--enter-stage) * var(--enter-step));
142-
}
143-
144-
.slide-enter-content > *:nth-child(1) {
145-
--enter-stage: 1;
146-
}
147-
.slide-enter-content > *:nth-child(2) {
148-
--enter-stage: 2;
149-
}
150-
.slide-enter-content > *:nth-child(3) {
151-
--enter-stage: 3;
152-
}
153-
.slide-enter-content > *:nth-child(4) {
154-
--enter-stage: 4;
155-
}
156-
.slide-enter-content > *:nth-child(5) {
157-
--enter-stage: 5;
158-
}
159-
.slide-enter-content > *:nth-child(6) {
160-
--enter-stage: 6;
161-
}
162-
.slide-enter-content > *:nth-child(7) {
163-
--enter-stage: 7;
164-
}
165-
.slide-enter-content > *:nth-child(8) {
166-
--enter-stage: 8;
167-
}
168-
.slide-enter-content > *:nth-child(9) {
169-
--enter-stage: 9;
170-
}
171-
.slide-enter-content > *:nth-child(10) {
172-
--enter-stage: 10;
173-
}
174-
.slide-enter-content > *:nth-child(11) {
175-
--enter-stage: 11;
176-
}
177-
.slide-enter-content > *:nth-child(12) {
178-
--enter-stage: 12;
179-
}
180-
.slide-enter-content > *:nth-child(13) {
181-
--enter-stage: 13;
182-
}
183-
.slide-enter-content > *:nth-child(14) {
184-
--enter-stage: 14;
185-
}
186-
.slide-enter-content > *:nth-child(15) {
187-
--enter-stage: 15;
188-
}
189-
.slide-enter-content > *:nth-child(16) {
190-
--enter-stage: 16;
191-
}
192-
.slide-enter-content > *:nth-child(17) {
193-
--enter-stage: 17;
194-
}
195-
.slide-enter-content > *:nth-child(18) {
196-
--enter-stage: 18;
197-
}
198-
.slide-enter-content > *:nth-child(19) {
199-
--enter-stage: 19;
200-
}
201-
.slide-enter-content > *:nth-child(20) {
202-
--enter-stage: 20;
203-
}
204-
.slide-enter-content > *:nth-child(21) {
205-
--enter-stage: 21;
206-
}
207-
.slide-enter-content > *:nth-child(22) {
208-
--enter-stage: 22;
209-
}
210-
.slide-enter-content > *:nth-child(23) {
211-
--enter-stage: 23;
212-
}
213-
.slide-enter-content > *:nth-child(24) {
214-
--enter-stage: 24;
215-
}
216-
.slide-enter-content > *:nth-child(25) {
217-
--enter-stage: 25;
218-
}
219-
}

0 commit comments

Comments
 (0)