<main>
<h1 id="target">Scroll to Down 👇</h1>
<h2>When the headline above disappears, the Top Button appears..</h2>
<!-- this is a little update from this:
https://codepen.io/marcelrojas/pen/WNwgBRg
so: not my work, just a little tweak
-->
<!-- Button on fixed on bottom right corner of the page -->
<button class="scrollToTopBtn">⬆</button>
</main>
<footer></footer>
* {
box-sizing: border-box
}
main {
height: 200vmin
}
footer {
display: flex;
justify-content: flex-end;
padding: 16px
}
.scrollToTopBtn {
background-color: black;
border: none;
border-radius: 50%;
color: white;
cursor: pointer;
font-size: 16px;
line-height: 48px;
width: 48px;
/* place it at the bottom right corner */
position: fixed;
bottom: 30px;
right: 30px;
/* keep it at the top of everything else */
z-index: 100;
/* hide with opacity */
opacity: 0;
/* also add a translate effect */
transform: translateY(100px);
/* and a transition */
transition: all .5s ease
}
.showBtn {
opacity: 1;
transform: translateY(0)
}
// We select the element we want to target
var target = document.getElementById("target");
var scrollToTopBtn = document.querySelector(".scrollToTopBtn")
var rootElement = document.documentElement
// Next we want to create a function that will be called when that element is intersected
function callback(entries, observer) {
// The callback will return an array of entries, even if you are only observing a single item
entries.forEach(entry => {
if (!entry.isIntersecting) {
// Show button
scrollToTopBtn.classList.add("showBtn")
} else {
// Hide button
scrollToTopBtn.classList.remove("showBtn")
}
});
}
function scrollToTop() {
rootElement.scrollTo({
top: 0,
behavior: "smooth"
})
}
scrollToTopBtn.addEventListener("click", scrollToTop);
// Next we instantiate the observer with the function we created above. This takes an optional configuration
// object that we will use in the other examples.
let observer = new IntersectionObserver(callback);
// Finally start observing the target element
observer.observe(target);
This Pen doesn't use any external JavaScript resources.