<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' })
})
一番下までスクロールしてください。
一番下までスクロールしてください。
一番下までスクロールしてください。
一番下までスクロールしてください。
一番下までスクロールしてください。
一番下までスクロールしてください。