Minimalist progress bar
Slim progress bars for web applications. Inspired by Google, YouTube, and Medium.
Table of contents
NProgress is available via npm.
npm install --save nprogress
ES modules
import * as NProgress from "nprogress";
@import "~nprogress/css/nprogress.css";
Sass
$nprogress-color: #29d;
@import "~nprogress/css/nprogress.scss";
UMD build (via CDN)
<script src="nprogress.js"></script>
<link rel="stylesheet" href="nprogress.css" />
Also available via jsdelivr CDN:
Call start()
and done()
to control the progress bar.
NProgress.start();
NProgress.done();
Turbolinks (version 5+)
Ensure you're using Turbolinks 5+, and use this: (explained here)
$(document).on("turbolinks:click", function () {
NProgress.start();
});
$(document).on("turbolinks:render", function () {
NProgress.done();
NProgress.remove();
});
Turbolinks (v3 and below)
Ensure you're using Turbolinks 1.3.0+, and use this: (explained here)
$(document).on("page:fetch", function () {
NProgress.start();
});
$(document).on("page:change", function () {
NProgress.done();
});
$(document).on("page:restore", function () {
NProgress.remove();
});
Pjax
Try this: (explained here)
$(document).on("pjax:start", function () {
NProgress.start();
});
$(document).on("pjax:end", function () {
NProgress.done();
});
jQuery AJAX
$(document).on("ajaxStart", function () {
NProgress.start();
});
$(document).on("ajaxStop", function () {
NProgress.done();
});
Colors can be customized using CSS variables.
#nprogress {
--nprogress-color: #29d;
--nprogress-height: 2px;
--nprogress-spinner-opacity: 1;
--nprogress-spinner-size: 18px;
--nprogress-spinner-stroke-width: 2px;
}
$nprogress-color: #29d;
set()
Percentages: To set a progress percentage, call .set(n)
, where n is a
number between 0..1
.
NProgress.set(0.0); // Sorta same as .start()
NProgress.set(0.4);
NProgress.set(1.0); // Sorta same as .done()
inc()
Incrementing: To increment the progress bar, just use .inc()
. This
increments it with a random amount. This will never get to 100%: use it for
every image load (or similar).
NProgress.inc();
If you want to increment by a specific value, you can pass that as a parameter:
NProgress.inc(0.2); // This will get the current status value and adds 0.2 until status is 0.994
done(true)
Force-done: By passing true
to done()
, it will show the progress bar
even if it's not being shown. (The default behavior is that .done() will not
do anything if .start() isn't called)
NProgress.done(true);
getPercent()
Get the current percentage: Use getPercent()
to get the current value.
console.log(NProgress.getPercent());
Changes the minimum percentage used upon starting. (default: 0.08
)
NProgress.configure({ minimum: 0.1 });
You can change the markup using template
. To keep the progress bar working, keep an element with role='bar'
in there. See the default template for reference.
NProgress.configure({
template: "<div class='....'>...</div>",
});
Adjust animation settings using easing (a CSS easing string) and speed (in ms). (default: ease
and 200
)
NProgress.configure({ easing: "ease", speed: 500 });
Turn off the automatic incrementing behavior by setting this to false
. (default: true
)
NProgress.configure({ trickle: false });
Adjust how often to trickle/increment, in ms.
NProgress.configure({ trickleSpeed: 200 });
Turn off loading spinner by setting it to false. (default: true
)
NProgress.configure({ showSpinner: false });
specify this to change the parent container. (default: body
)
NProgress.configure({ parent: "#container" });
Hiding the spinner
#nprogress {
--nprogress-spinner-opacity: 0;
}
Changing the color
#nprogress {
--nprogress-color: #29d;
}
- New UI Pattern: Website Loading Bars (usabilitypost.com)
NProgress © 2013-2020, Rico Sta. Cruz. Released under the MIT License.
Authored and maintained by Rico Sta. Cruz with help from contributors.
ricostacruz.com · GitHub @rstacruz · Twitter @rstacruz