Skip to content

Commit 225b6d4

Browse files
authored
feat: add sticky effect to the readme header on the readme page (#1775)
1 parent 036dfc2 commit 225b6d4

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

app/pages/package/[[org]]/[name].vue

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,27 @@ const router = useRouter()
3333
3434
const header = useTemplateRef('header')
3535
const isHeaderPinned = shallowRef(false)
36+
const readmeHeader = useTemplateRef('readmeHeader')
37+
const isReadmeHeaderPinned = shallowRef(false)
3638
const navExtraOffset = shallowRef(0)
3739
const isMobile = useMediaQuery('(max-width: 639.9px)')
3840
39-
function checkHeaderPosition() {
40-
const el = header.value
41-
if (!el) return
41+
const headerBounds = useElementBounding(header)
42+
const readmeStickyTop = computed(() => `${56 + headerBounds.height.value}px`)
43+
44+
function isStickyPinned(el: HTMLElement | null): boolean {
45+
if (!el) return false
4246
4347
const style = getComputedStyle(el)
4448
const top = parseFloat(style.top) || 0
4549
const rect = el.getBoundingClientRect()
4650
47-
isHeaderPinned.value = Math.abs(rect.top - top) < 1
51+
return Math.abs(rect.top - top) < 1
52+
}
53+
54+
function checkHeaderPosition() {
55+
isHeaderPinned.value = isStickyPinned(header.value)
56+
isReadmeHeaderPinned.value = isStickyPinned(readmeHeader.value)
4857
}
4958
5059
useEventListener('scroll', checkHeaderPosition, { passive: true })
@@ -1394,7 +1403,12 @@ const showSkeleton = shallowRef(false)
13941403

13951404
<!-- README -->
13961405
<section id="readme" class="min-w-0 scroll-mt-20" :class="$style.areaReadme">
1397-
<div class="flex flex-wrap items-center justify-between mb-3 px-1">
1406+
<div
1407+
ref="readmeHeader"
1408+
class="flex sticky z-10 flex-wrap items-center justify-between mb-3 py-2 -mx-1 px-2 transition-shadow duration-200"
1409+
:class="{ 'bg-bg border-border border-b': isReadmeHeaderPinned }"
1410+
:style="{ top: readmeStickyTop }"
1411+
>
13981412
<h2 id="readme-heading" class="group text-xs text-fg-subtle uppercase tracking-wider">
13991413
<LinkBase to="#readme">
14001414
{{ $t('package.readme.title') }}

app/pages/package/[[org]]/[name]/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// stub page to help with paths
33
definePageMeta({
44
name: 'package',
5-
scrollMargin: 150,
5+
scrollMargin: 200,
66
})
77
</script>
88

0 commit comments

Comments
 (0)