Creating A Circular Reading Progress Indicator with jQuery and SVG
File Size: | 4.16 KB |
---|---|
Views Total: | 2865 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

A small jQuery plugin that draws an animated circular SVG progress bar with percentage to indicate the reading progress on your web page.
How to use it:
1. Create a circular progress bar using SVG element as follows.
<div class="progress"> <div class="percent"></div> <svg class="progress-circle" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="xMinYMin meet" class="svg-content"> <path d=" M50,1 a49,49 0 0,1 0,98 a49,49 0 0,1 0,-98 "/> </svg> </div>
2. The required CSS to style the reading progress indicator.
.progress { position: fixed; right: 10px; top: 10px; height: 100px; width: 100px; } .progress .percent { text-align: center; font-size: 24px; font-weight: bold; color: rgba(0, 0, 0, 0.1); position: absolute; line-height: 100px; width: 100%; } .progress svg path { fill: none; } .progress svg.progress-circle path { stroke: rgba(255, 0, 0, 0.55); stroke-width: 2; }
3. Include the necessary jQuery javascript library at the bottom of the web page.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
4. Setup SVG animation.
var progressPath = document.querySelector('.progress path'); var pathLength = progressPath.getTotalLength(); progressPath.style.transition = progressPath.style.WebkitTransition = 'none'; progressPath.style.strokeDasharray = pathLength + ' ' + pathLength; progressPath.style.strokeDashoffset = pathLength; progressPath.getBoundingClientRect(); progressPath.style.transition = progressPath.style.WebkitTransition = 'stroke-dashoffset 300ms linear';
5. Define updateProgress function.
var updateProgress = function () { // calculate values var scroll = $(window).scrollTop(); var height = $(document).height() - $(window).height(); var percent = Math.round(scroll * 100 / height); var progress = pathLength - (scroll * pathLength / height); // update dashOffset progressPath.style.strokeDashoffset = progress; // update progress count $('.percent').text(percent+"%"); }
6. Trigger updateProgress once on load and then on scroll.
updateProgress(); $(window).scroll(updateProgress);
This awesome jQuery plugin is developed by SachaG. For more Advanced Usages, please check the demo page or visit the official website.