Download
Demo
- Overview
- Documents
User Rating: 5/5 ( 1 votes)
Your Rating:
Scrolling Progress Bar creats an animated progress bar that updates the progress based on how far you scrolled into a content section.
Source: webdesigncrowd.com
1. HTML
<div class="content"> <div id="intro"> <h2>Introduction</h2> <p>Content</p> </div> <div id="part-1"> <h2>Part 1: Do this thing!</h2> <p>Content</p> </div> <div id="part-2"> <h2>Part 2: Do that other thing!</h2> <p>Content</p> </div> </div> <div class="progress"> <div class="wrapper"> <div class="bar"> <a href="#intro">Introduction</a> <i class="icon-ok"></i> <span></span> </div> <div class="bar"> <a href="#part-1">Part 1: Do this thing!</a> <i class="icon-ok"></i> <span></span> </div> <div class="bar"> <a href="#part-2">Part 2: Do that other thing!</a> <i class="icon-ok"></i> <span></span> </div> </div> </div>
2. CSS
.content { width: 60%; float: left; margin: 45px 0; padding: 0 3% 0 0; border-right: 1px solid rgba(255,255,255,.4); } .progress { position: relative; float: left; text-align: left; width: 330px; padding: 45px 0 0 2%; } .progress .wrapper { position: absolute; width: inherit; } .progress .wrapper.affix { position: fixed; top: 10px; } .progress .bar { position: relative; display: block; width: 100%; height: 40px; margin-bottom: 10px; background-color: #1c92db; } .progress .bar span { position: absolute; display: block; top: 0; width: 0; height: 40px; z-index: 0; background-color: #1275b7; } .progress .bar a { line-height: 40px; position: relative; z-index: 1; } .progress .bar i { position: absolute; right: -30px; height: 40px; line-height: 40px; color: #36a7f3; -webkit-transition: color .3s; transition: color .3s; }
3. JAVASCRIPT
var wrapper_top = $(".progress .wrapper").offset().top; $(window).scroll(function (){ var wrapper_height = $(".progress .wrapper").height(); // Affixes Progress Bars var top = $(this).scrollTop(); if (top > wrapper_top - 10) { $(".progress .wrapper").addClass("affix"); } else { $(".progress .wrapper").removeClass("affix"); } // Calculate each progress section $(".content div").each(function(i){ var this_top = $(this).offset().top; var height = $(this).height(); var this_bottom = this_top + height; var percent = 0; // Scrolled within current section if (top >= this_top && top <= this_bottom) { percent = ((top - this_top) / (height - wrapper_height)) * 100; if (percent >= 100) { percent = 100; $(".progress .wrapper .bar:eq("+i+") i").css("color", "#fff"); } else { $(".progress .wrapper .bar:eq("+i+") i").css("color", "#36a7f3"); } } else if (top > this_bottom) { percent = 100; $(".progress .wrapper .bar:eq("+i+") i").css("color", "#fff"); } console.log(i); $(".progress .wrapper .bar:eq("+i+") span").css("width", percent + "%"); }); });