CSSのみで実装しないBack to Topのサンプル

<p>一番下までスクロールしてください。</p>
<p>一番下までスクロールしてください。</p>
<p>一番下までスクロールしてください。</p>
<p>一番下までスクロールしてください。</p>
<p>一番下までスクロールしてください。</p>
<p>一番下までスクロールしてください。</p>
<button id="backToTop">Back to Top</button>
p + p {
    margin-top: 50vh;
}

#footer {
  display: grid;
  place-items: center;
  height: 300px;
  background: #ccc;
}

#backToTop {
  transform: translateY(100px);
  transition: transform 0.5s, opacity 0.5s;
  position: fixed;
  bottom: 20px;
  right: 20px;
  padding: 10px 20px;
  background: #333;
  color: #fff;
  text-decoration: none;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  opacity: 0;
}

#backToTop.visible {
  transform: translateY(0);
  opacity: 1;
}
const backToTop = document.getElementById('backToTop')

const observerOptions = {
  root: null,
  rootMargin: '0px',
  threshold: 0,
}

const observer = new IntersectionObserver((entries) => {
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      backToTop.classList.add('visible')
    } else {
      backToTop.classList.remove('visible')
    }
  })
}, observerOptions)

observer.observe(footer)

backToTop.addEventListener('click', () => {
  window.scrollTo({ top: 0, behavior: 'smooth' })
})

一番下までスクロールしてください。

一番下までスクロールしてください。

一番下までスクロールしてください。

一番下までスクロールしてください。

一番下までスクロールしてください。

一番下までスクロールしてください。

元記事を表示する