0
2

More than 1 year has passed since last update.

Vuejs3 <script setup> 構文 トップに戻るボタン

Posted at

templete

<template>
  <transition name="opacity">
    <button 
      v-show="buttonActive"
      @click="pageTop"
      class="fixed right-3 bottom-3 text-white bg-teal-500 w-20 h-20 rounded-full"
    >
      トップに戻る
    </button>
  </transition>
</template>

ボタンのデザインはtailwind CSS、またtransitionでアニメーションを使用していますが、お好みで変更して下さい。

script

<script setup>
import { onMounted, ref } from 'vue'

const buttonActive = ref(false)

let scroll = 0

const pageTop = () => {
  window.scrollTo({
      top: 0,
      behavior: 'smooth'
  })
}

const scrollWindow = () => {
  const top = 100 //topから100pxスクロールしたらボタン登場
  scroll = window.scrollY //垂直方向

  if (top <= scroll) {
    buttonActive.value = true
  } else {
    buttonActive.value = false
  }
}

onMounted(() => {
  window.addEventListener('scroll', scrollWindow)
})
</script>

アニメーション

動きが欲しい人用

<style scoped>
.opacity-enter{
  opacity: 0;
}
.opacity-enter-active{
  transition: opacity 1s;
}
.opacity-enter-to{
  opacity: 1;
}
.opacity-leave{
  opacity: 1;
}
.opacity-leave-active{
  transition: opacity 1s;
}
.opacity-leave-to{
  opacity: 0;
}
</style>

完成イメージ

参考サイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2