|
13 | 13 | class="w-full h-full" |
14 | 14 | :options="scrollbarOptions" |
15 | 15 | defer |
| 16 | + @os-initialized="scrollbarInitialized" |
16 | 17 | > |
17 | 18 | <article |
18 | 19 | ref="article" |
|
21 | 22 | style="white-space: wrap;" |
22 | 23 | :style="{ padding: articlePadding }" |
23 | 24 | > |
24 | | - <Content ref="content"/> |
| 25 | + <Content/> |
25 | 26 | </article> |
| 27 | + <slot name="contentAfter"> |
| 28 | + <!--<NanoGiscus/>--> |
| 29 | + </slot> |
26 | 30 | </OverlayScrollbarsComponent> |
27 | 31 | </div> |
28 | 32 | </div> |
29 | 33 | </template> |
30 | 34 |
|
31 | 35 | <script setup lang="ts"> |
| 36 | + // import NanoGiscus from '@NanoUI/NanoGiscus/index.vue'; |
32 | 37 | import 'overlayscrollbars/styles/overlayscrollbars.css'; |
33 | 38 | import scrollbarOptions from '../../config/scrollbarOptions'; |
34 | 39 | import { OverlayScrollbarsComponent } from 'overlayscrollbars-vue'; |
|
39 | 44 |
|
40 | 45 | const { page } = useData(); |
41 | 46 | const route = useRoute(); |
42 | | - const scrollbars = ref<any | null>(null); |
| 47 | + const scrollbars = ref<InstanceType<typeof OverlayScrollbarsComponent> | null>(null); |
43 | 48 | const article = ref<HTMLElement | null>(null); |
44 | 49 |
|
45 | 50 | // Listen for routing changes and scroll to the top |
|
51 | 56 | immediate: true |
52 | 57 | }); |
53 | 58 |
|
| 59 | + // Listen for hash changes |
54 | 60 | function hashChange() { |
55 | 61 | if (location.hash) { |
56 | 62 | const _hashText = decodeURIComponent(location.hash.replace('#', '')); |
57 | 63 | emitter.emit('scroll-to-hash', _hashText); |
58 | 64 | } |
59 | 65 | } |
60 | 66 |
|
| 67 | + function scrollbarInitialized() { |
| 68 | + // console.log('scrollbarInitialized'); |
| 69 | + setTimeout(() => { |
| 70 | + hashChange(); |
| 71 | + }, 0); |
| 72 | + } |
| 73 | +
|
61 | 74 | onContentUpdated(() => { |
| 75 | + // console.log('content updated'); |
62 | 76 | setTimeout(() => { |
63 | 77 | hashChange(); |
64 | | - }, 240); |
| 78 | + }, 0); |
65 | 79 | }); |
66 | 80 |
|
67 | 81 | const resizeObserver = ref<ResizeObserver | null>(null); |
68 | 82 | const articlePadding = ref<string>('calc(var(--base-size))'); |
69 | 83 |
|
70 | 84 | onMounted(() => { |
71 | | - setTimeout(() => { |
72 | | - hashChange(); |
73 | | - }, 240); |
| 85 | + // console.log('mounted'); |
74 | 86 | // Listen for scroll-to-hash events |
75 | 87 | emitter.on('scroll-to-hash', (hash: string) => { |
76 | | - if (hash === '' || hash === null || hash === undefined) { |
| 88 | + if (!hash) { |
77 | 89 | return; |
78 | 90 | } |
79 | 91 | const target = document.getElementById(hash); |
|
96 | 108 | for (const entry of entries) { |
97 | 109 | const { target } = entry; |
98 | 110 | const { clientWidth } = target as HTMLElement; |
99 | | - if (clientWidth < 1280) { |
| 111 | + if (clientWidth < 768) { |
100 | 112 | articlePadding.value = 'calc(var(--base-size))'; |
101 | 113 | } else { |
102 | 114 | articlePadding.value = 'calc(var(--base-size)) calc(var(--base-size) * 2)'; |
103 | 115 | } |
104 | 116 | } |
105 | 117 | }); |
| 118 | + resizeObserver.value.observe(article.value!); |
| 119 | +
|
| 120 | + scrollbars.value?.osInstance()?.update(); |
106 | 121 | }); |
107 | 122 |
|
108 | 123 | onUnmounted(() => { |
|
0 commit comments