Hello everyone. Welcome to today’s tutorial. In today’s tutorial, we will learn how to create a scroll to the top button. This scroll to the top button also has a circular scroll progress indicator. To build this button, we HTML, CSS and, some Vanilla javascript.
The javascript we will use is pretty simple and absolutely beginner-friendly. I also have a tutorial on the scroll progress indicator bar on my youtube channel. You can check out the tutorial here.
When the user scrolls a certain amount of page, the scroll to top button becomes visible. The percentage of the page that is scroll, is indicated with a circular progress bar around the button. When the user clicks on the button it takes the user back to the very top of the page.
Video Tutorial:
If you prefer to code along to a video tutorial rather than reading the blog post, you can check out the video here down below. Also, don’t forget to subscribe to my youtube channel, where I post web development related tips, tricks and tutorials regularly.
Project Folder Structure:
Before we code, we need to create the project folder structure. The project folder consists of a folder called – Scroll To Top With Scroll Progress.
Inside this folder, we create three files – index.html, style.css and script.js. They are the HTML document, the stylesheet and the javascript file respectively. Now let us begin the coding.
HTML:
We start with HTML. Now copy the code below and paste it into your HTML document. This creates the structure needed to implement the scroll to the top button.
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Scroll To Top With Scroll Progress</title>
<!-- Google Font -->
<link
href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap"
rel="stylesheet"
/>
<!-- Stylesheet -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="progress">
<span id="progress-value">🠕</span>
</div>
<h1>Back To Top Button</h1>
<h3>With Scroll Progress</h3>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam unde
cupiditate nobis incidunt molestias rem aliquam nisi, nihil non eius
blanditiis eveniet veritatis, quam architecto cum quod maiores facere
atque, alias neque minus hic asperiores! Qui, harum iste, optio nam
dolorum molestias impedit ipsum quos non magnam quaerat error
necessitatibus, officiis nostrum minus maiores iusto accusantium sint
atque pariatur. Recusandae facere facilis ab cupiditate reiciendis. Ut
reiciendis iusto non eligendi saepe iure, itaque, odio facere laboriosam
qui voluptatibus id assumenda totam fugit, numquam temporibus ad sint
voluptatum tenetur unde illo. Pariatur nesciunt, perspiciatis rerum
voluptates voluptatum consequuntur placeat autem deserunt.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ullam sed
perspiciatis rerum ea quia nostrum, quod sit dolorem, illum officia
inventore, maiores ipsum voluptas aut facere? Quos, autem odit nostrum
ipsam recusandae nulla, labore assumenda voluptatibus quas quisquam
adipisci eveniet illo voluptatem nisi porro, deserunt nemo! Sit reiciendis
unde ab, consequatur excepturi expedita vel tempora mollitia quibusdam
velit earum exercitationem placeat praesentium quo quisquam ipsa voluptate
eum, tempore aperiam corporis. Exercitationem, amet. Amet cum nulla
accusantium modi molestias nesciunt sint soluta, fuga alias doloribus odit
dolor ipsa libero corporis neque adipisci aspernatur quisquam, sit,
officia id harum tenetur ullam beatae!
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Suscipit est in
minima quos accusamus, id assumenda laborum libero culpa autem corrupti
repellendus voluptatem saepe odit maxime, aut ab fugit voluptas omnis
dolorem voluptate rem velit. Alias quod hic ullam necessitatibus! Tempore
nesciunt tenetur omnis perferendis id beatae non cum porro. Pariatur
facere nesciunt deleniti, laudantium praesentium facilis, minus quo magni
dolorem similique, mollitia quisquam ad voluptatibus iure ullam magnam!
Blanditiis, harum? Eveniet architecto eum velit, quia molestiae accusamus
voluptatem non quis accusantium aspernatur cumque id modi! Aliquam ab
expedita ipsum, libero in quod, sunt mollitia voluptatibus sapiente, dolor
sit delectus?
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit molestias
dolorum dolore amet tenetur! At sed nulla sapiente dolorum hic, facere
accusamus officiis placeat commodi molestias, velit dolor ab quibusdam
nostrum numquam optio asperiores impedit perspiciatis consequuntur iusto
laborum deserunt quisquam doloribus! Ducimus explicabo aspernatur sed
dolores perspiciatis, vero tenetur consequuntur culpa dicta numquam facere
labore, deleniti maiores. Fuga id saepe aliquid adipisci iste, beatae
pariatur ullam voluptas accusantium dolor voluptatibus numquam consectetur
asperiores eaque reprehenderit! Maiores, ex consequuntur! Consequuntur
nulla voluptate quaerat accusantium et optio reiciendis id repellendus
possimus, minus dolore? Perferendis labore doloribus iusto nostrum
nesciunt vero commodi cupiditate optio at. Perspiciatis atque inventore,
dolorum iste deserunt, accusantium magnam cum temporibus quae placeat
magni debitis blanditiis reprehenderit tempore a veniam laborum
consectetur amet? Animi cumque nisi aspernatur consequuntur, molestias
vero eaque fuga repellat mollitia assumenda necessitatibus! Suscipit atque
modi quam ab optio. Eum voluptatem, magni deleniti voluptas autem
molestias consectetur totam culpa facilis maiores illum dolore aut! Cumque
quas molestiae dolorem pariatur commodi omnis, ut, iste aliquid illo ipsum
eum culpa laborum doloribus quod. Ad dicta reprehenderit corrupti, soluta
sapiente unde officia blanditiis architecto reiciendis magni sequi.
Repellat ex ab laboriosam, quos error enim ut officiis inventore
accusamus!
</p>
<!-- Script -->
<script src="script.js"></script>
</body>
</html>
CSS:
Next, we use CSS to style and position this button. Copy the code provided below and paste it into your stylesheet.
* {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
html {
scroll-behavior: smooth;
}
h1 {
background-color: #03cc65;
color: #ffffff;
font-size: 15vmin;
text-align: center;
padding-top: 30px;
}
h3 {
background-color: #03cc65;
color: #001a2e;
font-size: 8vmin;
text-align: center;
}
p {
font-size: 3vmin;
line-height: 2em;
letter-spacing: 0.05em;
text-align: justify;
margin: 50px 0;
padding: 0 30px;
}
#progress {
position: fixed;
bottom: 20px;
right: 10px;
height: 70px;
width: 70px;
display: none;
place-items: center;
border-radius: 50%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
cursor: pointer;
}
#progress-value {
display: block;
height: calc(100% - 15px);
width: calc(100% - 15px);
background-color: #ffffff;
border-radius: 50%;
display: grid;
place-items: center;
font-size: 35px;
color: #001a2e;
}
Javascript:
Finally, we need to implement the functionality. We use javascript to add the logic. Now copy the code below and paste it into your script file.
let calcScrollValue = () => {
let scrollProgress = document.getElementById("progress");
let progressValue = document.getElementById("progress-value");
let pos = document.documentElement.scrollTop;
let calcHeight =
document.documentElement.scrollHeight -
document.documentElement.clientHeight;
let scrollValue = Math.round((pos * 100) / calcHeight);
if (pos > 100) {
scrollProgress.style.display = "grid";
} else {
scrollProgress.style.display = "none";
}
scrollProgress.addEventListener("click", () => {
document.documentElement.scrollTop = 0;
});
scrollProgress.style.background = `conic-gradient(#03cc65 ${scrollValue}%, #d7d7d7 ${scrollValue}%)`;
};
window.onscroll = calcScrollValue;
window.onload = calcScrollValue;
That’s it for this tutorial. I hope you enjoyed this tutorial. If you have issues while creating this button, you can download the source code by clicking on the download code button below. I would love to hear from you guys. So if you have any queries, suggestions or feedback you can drop them in the comments below.
Don’t forget to share this tutorial with your friends if you find it useful. Stay tuned for more such tutorials. Happy Coding!


This was working earlier but not working now
It works perfect, but how to get it to scroll smooth to the top?