@xingwangzhe/stalux 1.21.8 → 1.21.9
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
|
@@ -107,9 +107,6 @@ const mdSourceUrl = exportMd
|
|
|
107
107
|
{
|
|
108
108
|
props.hasImage && (
|
|
109
109
|
<script>
|
|
110
|
-
import PhotoSwipeLightbox from "photoswipe/lightbox";
|
|
111
|
-
import PhotoSwipe from "photoswipe";
|
|
112
|
-
|
|
113
110
|
// 选择器必须与 @xingwangzhe/satteri-photoswipe HAST 插件生成的 class 一致
|
|
114
111
|
const GALLERY_SELECTOR = "a.pswp-gallery-item";
|
|
115
112
|
|
|
@@ -146,6 +143,12 @@ const mdSourceUrl = exportMd
|
|
|
146
143
|
let lightbox = null;
|
|
147
144
|
|
|
148
145
|
async function initLightbox() {
|
|
146
|
+
const [{ default: PhotoSwipeLightbox }, { default: PhotoSwipe }] = await Promise.all([
|
|
147
|
+
import("photoswipe/lightbox"),
|
|
148
|
+
import("photoswipe"),
|
|
149
|
+
import("photoswipe/dist/photoswipe.css"),
|
|
150
|
+
]);
|
|
151
|
+
|
|
149
152
|
// 销毁旧实例(View Transition 导航后,旧 DOM 已移除,需安全销毁)
|
|
150
153
|
if (lightbox) {
|
|
151
154
|
try {
|
|
@@ -168,15 +171,24 @@ const mdSourceUrl = exportMd
|
|
|
168
171
|
lightbox.init();
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
|
|
172
|
-
|
|
174
|
+
let initPromise = null;
|
|
175
|
+
const ensureLightbox = () => {
|
|
176
|
+
if (!initPromise) initPromise = initLightbox();
|
|
177
|
+
return initPromise;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// 仅在用户第一次点击图片时加载 PhotoSwipe、其 CSS 和图片尺寸数据,
|
|
181
|
+
// 文章首屏不再为未使用的灯箱支付 JS/CSS 成本。
|
|
182
|
+
document.addEventListener("click", (event) => {
|
|
183
|
+
const target = event.target;
|
|
184
|
+
if (target instanceof Element && target.closest(GALLERY_SELECTOR)) {
|
|
185
|
+
void ensureLightbox();
|
|
186
|
+
}
|
|
187
|
+
}, { capture: true });
|
|
173
188
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
} else {
|
|
178
|
-
document.addEventListener("DOMContentLoaded", () => setTimeout(initLightbox, 0));
|
|
179
|
-
}
|
|
189
|
+
document.addEventListener("astro:page-load", () => {
|
|
190
|
+
initPromise = null;
|
|
191
|
+
});
|
|
180
192
|
</script>
|
|
181
193
|
)
|
|
182
194
|
}
|
|
@@ -6,7 +6,6 @@ import PostNavigation from "@components/stalux/posts/postNavigation.astro";
|
|
|
6
6
|
import PostCC from "@components/stalux/posts/postCC.astro";
|
|
7
7
|
import WalineComment from "@components/stalux/posts/WalineComment.astro";
|
|
8
8
|
import { buildWalineProps } from "@utils/waline";
|
|
9
|
-
import PhotoSwipeStyle from "@components/stalux/posts/PhotoSwipeStyle.astro";
|
|
10
9
|
import { getCollection } from "astro:content";
|
|
11
10
|
import "@styles/base/math.css";
|
|
12
11
|
import layoutStyle from "@styles/components/posts/postLayout.module.css";
|
|
@@ -48,8 +47,6 @@ const walineConfig = walineSection && walineSection.serverURL ? {
|
|
|
48
47
|
} : undefined;
|
|
49
48
|
---
|
|
50
49
|
|
|
51
|
-
{props.hasImage && <PhotoSwipeStyle />}
|
|
52
|
-
|
|
53
50
|
<div class={layoutStyle.postLayout}>
|
|
54
51
|
<div class={layoutStyle.container}>
|
|
55
52
|
<!-- Left Sidebar -->
|