@xingwangzhe/stalux 1.21.6 → 1.21.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -87,7 +87,14 @@ const navs = navsConfig?.items ?? [];
|
|
|
87
87
|
</nav>
|
|
88
88
|
<Search />
|
|
89
89
|
<script>
|
|
90
|
+
const navWindow = window as Window & {
|
|
91
|
+
__STALUX_NAV_INITIALIZED__?: boolean;
|
|
92
|
+
};
|
|
93
|
+
|
|
90
94
|
document.addEventListener("astro:page-load", () => {
|
|
95
|
+
if (navWindow.__STALUX_NAV_INITIALIZED__) return;
|
|
96
|
+
navWindow.__STALUX_NAV_INITIALIZED__ = true;
|
|
97
|
+
|
|
91
98
|
const searchBtn = document.querySelector(
|
|
92
99
|
'[data-ref="stalux-search-btn"]',
|
|
93
100
|
);
|
|
@@ -141,7 +148,20 @@ const navs = navsConfig?.items ?? [];
|
|
|
141
148
|
const btnRight = document.querySelector('[data-ref="stalux-nav-scroll-right"]');
|
|
142
149
|
if (!navList || !btnLeft || !btnRight) return;
|
|
143
150
|
|
|
151
|
+
let frameId = 0;
|
|
152
|
+
let lastScale = "1";
|
|
153
|
+
|
|
154
|
+
function updateScrollButtons() {
|
|
155
|
+
const hasOverflow = navList.scrollWidth > navList.clientWidth;
|
|
156
|
+
const atStart = navList.scrollLeft <= 1;
|
|
157
|
+
const atEnd = navList.scrollLeft + navList.clientWidth >= navList.scrollWidth - 1;
|
|
158
|
+
|
|
159
|
+
btnLeft.toggleAttribute("data-visible", hasOverflow && !atStart);
|
|
160
|
+
btnRight.toggleAttribute("data-visible", hasOverflow && !atEnd);
|
|
161
|
+
}
|
|
162
|
+
|
|
144
163
|
function updateButtons() {
|
|
164
|
+
frameId = 0;
|
|
145
165
|
const navWidth = navList.clientWidth;
|
|
146
166
|
const itemCount = navList.children.length;
|
|
147
167
|
const baseFontSize = Number.parseFloat(getComputedStyle(navList).fontSize) || 16;
|
|
@@ -152,10 +172,17 @@ const navs = navsConfig?.items ?? [];
|
|
|
152
172
|
0,
|
|
153
173
|
) + gap * Math.max(0, itemCount - 1);
|
|
154
174
|
const scale = estimatedWidth > navWidth ? Math.max(minFontSize / baseFontSize, navWidth / estimatedWidth) : 1;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
175
|
+
const nextScale = String(scale);
|
|
176
|
+
if (nextScale !== lastScale) {
|
|
177
|
+
navList.style.setProperty("--nav-scale", nextScale);
|
|
178
|
+
lastScale = nextScale;
|
|
179
|
+
}
|
|
180
|
+
updateScrollButtons();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function scheduleUpdate() {
|
|
184
|
+
if (frameId) return;
|
|
185
|
+
frameId = requestAnimationFrame(updateButtons);
|
|
159
186
|
}
|
|
160
187
|
|
|
161
188
|
btnLeft.addEventListener("click", () => {
|
|
@@ -165,18 +192,16 @@ const navs = navsConfig?.items ?? [];
|
|
|
165
192
|
btnRight.addEventListener("click", () => {
|
|
166
193
|
navList.scrollBy({ left: 300, behavior: "smooth" });
|
|
167
194
|
});
|
|
168
|
-
|
|
169
|
-
// 监听滚动事件更新按钮状态
|
|
170
|
-
navList.addEventListener("scroll", updateButtons);
|
|
195
|
+
navList.addEventListener("scroll", scheduleUpdate, { passive: true });
|
|
171
196
|
|
|
172
197
|
// 用 ResizeObserver 监听容器尺寸变化(窗口缩窄/变宽时重新判断)
|
|
173
|
-
const ro = new ResizeObserver(
|
|
198
|
+
const ro = new ResizeObserver(scheduleUpdate);
|
|
174
199
|
ro.observe(navList);
|
|
175
200
|
if (navList.parentElement) ro.observe(navList.parentElement);
|
|
176
|
-
window.addEventListener("resize",
|
|
177
|
-
window.addEventListener("load",
|
|
201
|
+
window.addEventListener("resize", scheduleUpdate, { passive: true });
|
|
202
|
+
window.addEventListener("load", scheduleUpdate, { once: true });
|
|
178
203
|
|
|
179
204
|
// 初始检测
|
|
180
|
-
|
|
205
|
+
scheduleUpdate();
|
|
181
206
|
}
|
|
182
207
|
</script>
|
|
@@ -37,7 +37,7 @@ export type RouteAnimation = {
|
|
|
37
37
|
const easing = "cubic-bezier(0.25, 0.9, 0.2, 1)";
|
|
38
38
|
const exitAnimation: TransitionAnimation = {
|
|
39
39
|
name: "stalux-page-fade-out",
|
|
40
|
-
duration: "0.
|
|
40
|
+
duration: "0.16s",
|
|
41
41
|
easing,
|
|
42
42
|
fillMode: "both",
|
|
43
43
|
};
|
|
@@ -48,7 +48,7 @@ function createRouteAnimation(name: string, backName = `${name}-back`): RouteAni
|
|
|
48
48
|
old: exitAnimation,
|
|
49
49
|
new: {
|
|
50
50
|
name: `stalux-page-${name}-in`,
|
|
51
|
-
duration: "0.
|
|
51
|
+
duration: "0.2s",
|
|
52
52
|
easing,
|
|
53
53
|
fillMode: "both",
|
|
54
54
|
},
|
|
@@ -57,7 +57,7 @@ function createRouteAnimation(name: string, backName = `${name}-back`): RouteAni
|
|
|
57
57
|
old: exitAnimation,
|
|
58
58
|
new: {
|
|
59
59
|
name: `stalux-page-${backName}-in`,
|
|
60
|
-
duration: "0.
|
|
60
|
+
duration: "0.2s",
|
|
61
61
|
easing,
|
|
62
62
|
fillMode: "both",
|
|
63
63
|
},
|