Skip to content

Commit

Permalink
refactor: MkStickyContainerで<style />を使う (#14755)
Browse files Browse the repository at this point in the history
* remove rootEL ref

* use css module

* use v-bind in css

* --MI prefix

* remove unused ref

---------

Co-authored-by: syuilo <[email protected]>
  • Loading branch information
FineArchs and syuilo authored Oct 12, 2024
1 parent 85bb1ff commit ee08e9f
Showing 1 changed file with 25 additions and 31 deletions.
56 changes: 25 additions & 31 deletions packages/frontend/src/components/global/MkStickyContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@ SPDX-License-Identifier: AGPL-3.0-only
-->

<template>
<div ref="rootEl">
<div ref="headerEl">
<div>
<div ref="headerEl" :class="$style.header">
<slot name="header"></slot>
</div>
<div
ref="bodyEl"
:class="$style.body"
:data-sticky-container-header-height="headerHeight"
:data-sticky-container-footer-height="footerHeight"
style="position: relative; z-index: 0;"
>
<slot></slot>
</div>
<div ref="footerEl">
<div ref="footerEl" :class="$style.footer">
<slot name="footer"></slot>
</div>
</div>
Expand All @@ -27,10 +26,8 @@ import { onMounted, onUnmounted, provide, inject, Ref, ref, watch, shallowRef }

import { CURRENT_STICKY_BOTTOM, CURRENT_STICKY_TOP } from '@@/js/const.js';

const rootEl = shallowRef<HTMLElement>();
const headerEl = shallowRef<HTMLElement>();
const footerEl = shallowRef<HTMLElement>();
const bodyEl = shallowRef<HTMLElement>();

const headerHeight = ref<string | undefined>();
const childStickyTop = ref(0);
Expand Down Expand Up @@ -67,40 +64,37 @@ onMounted(() => {

watch([parentStickyTop, parentStickyBottom], calc);

watch(childStickyTop, () => {
if (bodyEl.value == null) return;
bodyEl.value.style.setProperty('--MI-stickyTop', `${childStickyTop.value}px`);
}, {
immediate: true,
});

watch(childStickyBottom, () => {
if (bodyEl.value == null) return;
bodyEl.value.style.setProperty('--MI-stickyBottom', `${childStickyBottom.value}px`);
}, {
immediate: true,
});

if (headerEl.value != null) {
headerEl.value.style.position = 'sticky';
headerEl.value.style.top = 'var(--MI-stickyTop, 0)';
headerEl.value.style.zIndex = '1';
observer.observe(headerEl.value);
}

if (footerEl.value != null) {
footerEl.value.style.position = 'sticky';
footerEl.value.style.bottom = 'var(--MI-stickyBottom, 0)';
footerEl.value.style.zIndex = '1';
observer.observe(footerEl.value);
}
});

onUnmounted(() => {
observer.disconnect();
});

defineExpose({
rootEl: rootEl,
});
</script>

<style lang='scss' module>
.body {
position: relative;
z-index: 0;
--MI-stickyTop: v-bind("childStickyTop + 'px'");
--MI-stickyBottom: v-bind("childStickyBottom + 'px'");
}

.header {
position: sticky;
top: var(--MI-stickyTop, 0);
z-index: 1;
}

.footer {
position: sticky;
bottom: var(--MI-stickyBottom, 0);
z-index: 1;
}
</style>

0 comments on commit ee08e9f

Please sign in to comment.