Newer
Older
vue3-front / src / components / FixedActionBar / index.vue
Stephanie on 24 Nov 2022 1 KB first commit
<script lang="ts" setup name="FixedActionBar">
const isBottom = ref(false)

onMounted(() => {
  onScroll()
  window.addEventListener('scroll', onScroll)
})

onUnmounted(() => {
  window.removeEventListener('scroll', onScroll)
})

function onScroll() {
  // 变量scrollTop是滚动条滚动时,滚动条上端距离顶部的距离
  const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
  // 变量windowHeight是可视区的高度
  const windowHeight = document.documentElement.clientHeight || document.body.clientHeight
  // 变量scrollHeight是滚动条的总高度(当前可滚动的页面的总高度)
  const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight
  // 滚动条到底部
  isBottom.value = Math.ceil(scrollTop + windowHeight) >= scrollHeight
}
</script>

<template>
  <div class="actionbar" :class="{ shadow: !isBottom }" data-fixed-calc-width>
    <slot />
  </div>
</template>

<style lang="scss" scoped>
.actionbar {
  z-index: 4;
  bottom: 0;
  padding: 20px;
  text-align: center;
  background-color: var(--g-app-bg);
  box-shadow: 0 0 1px 0 var(--g-box-shadow-color);
  transition: all 0.3s, var(--el-transition-box-shadow);

  &.shadow {
    box-shadow: 0 -10px 10px -10px var(--g-box-shadow-color);
  }
}

:deep(.el-form-item) {
  margin-bottom: 0;
}
</style>