Files
web-temp/layers/components/blocks/Button/ScrollTop.vue
2026-02-11 16:55:13 +09:00

53 lines
1.1 KiB
Vue

<script setup lang="ts">
import type { ColorObject, TrackingObject } from '#layers/types/api/common'
interface Props {
color: ColorObject
}
const props = defineProps<Props>()
const { locale } = useI18n()
const { y: windowY } = useWindowScroll({ behavior: 'smooth' })
const { sendLog } = useAnalytics()
const analytics = {
action_type: 'click',
click_item: 'TOP버튼',
click_sarea: 'TOP',
} as TrackingObject
const showBtn = computed(() => windowY.value > 0)
const backgroundColor = computed(() =>
getColorCodeFromData(props.color, 'none')
)
const handleScrollToTop = () => {
windowY.value = 0
sendLog(locale.value, analytics)
}
</script>
<template>
<Transition name="fade">
<AtomsButtonCircle
v-show="showBtn"
class="btn-top"
sr-only="top"
:style="{ backgroundColor: backgroundColor }"
@click="handleScrollToTop"
>
<AtomsIconsArrowControlTopLine />
</AtomsButtonCircle>
</Transition>
</template>
<style scoped>
.btn-top:hover :deep(.icon) {
@apply -translate-y-[3px];
}
.btn-top:hover :deep(.icon svg) {
fill-opacity: 1;
}
</style>