File tree Expand file tree Collapse file tree 1 file changed +31
-11
lines changed
docs/.vitepress/theme/components Expand file tree Collapse file tree 1 file changed +31
-11
lines changed Original file line number Diff line number Diff line change 1
1
<script setup lang="ts">
2
2
import { ref , onMounted } from ' vue' ;
3
3
4
+ const reflow = (element : HTMLElement ) => {
5
+ element .style .display = ' none' ;
6
+ element .offsetHeight ;
7
+ element .style .display = ' ' ;
8
+ };
9
+
10
+ const waitImageLoad = (
11
+ img : HTMLImageElement ,
12
+ ) => new Promise <void >(
13
+ (resolve ) => {
14
+ if (img .complete ) {
15
+ return resolve ();
16
+ }
17
+
18
+ img .addEventListener (' load' , () => resolve ());
19
+ img .addEventListener (' error' , () => resolve ());
20
+ }
21
+ );
22
+
4
23
const waitImages = (
5
24
element : HTMLElement ,
6
25
) => {
7
26
const images = element .querySelectorAll (' img' );
8
27
return Promise .all (
9
- Array .from (images ).map ((image ) => (
10
- new Promise <void >((resolve ) => {
11
- if (image .complete ) {
12
- resolve ();
13
- return ;
14
- }
15
-
16
- image .addEventListener (' load' , () => resolve ());
17
- image .addEventListener (' error' , () => resolve ());
18
- })
19
- ))
28
+ Array .from (images ).map (async (image ) => {
29
+ await waitImageLoad (image );
30
+ /**
31
+ * Bug in Safari where preloaded image causes the image to have
32
+ * 0 width.
33
+ * Load the FAQ page then navigating to the index page.
34
+ * Solution is to trigger reflow.
35
+ */
36
+ if (image .offsetWidth === 0 ) {
37
+ reflow (image );
38
+ }
39
+ })
20
40
);
21
41
};
22
42
You can’t perform that action at this time.
0 commit comments