Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11+ ✔ |
Minimalist accessible progress bar (no dependencies)
Slim accessible progress bars for Ajax'y applications. Inspired by Google, YouTube, and Medium.
Originally forked from https://github.com/rstacruz/nprogress
1.0.0+ has be rewritten and only supports IE 11+ & A+ spec promises but the API is essentially the same.
For a drop in replacement of the original nprogress with accessibility fixes and older browser support then use version 0.3.0
Using npm.
$ npm install --save accessible-nprogress
Using CDN:
<script src="https://unpkg.com/accessible-nprogress/dist/accessible-nprogress.min.js"></script>
<link rel='stylesheet' href='https://unpkg.com/accessible-nprogress/dist/accessible-nprogress.min.css'/>
Simply call start()
and done()
to control the progress bar.
NProgress.start();
NProgress.done();
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();
});
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(); });
Try this: (explained here)
$(document).on('pjax:start', function() { NProgress.start(); });
$(document).on('pjax:end', function() { NProgress.done(); });
- Add progress to your Ajax calls! Bind it to the jQuery or axios requests.
var requests = 0;
$(document).ajaxStart(function() {
if (requests === 0) {
NProgress.start();
}
requests++;
});
$(document).ajaxStop(function() {
requests--;
if (requests === 0) {
NProgress.done();
}
});
var requests = 0;
axios.interceptors.request.use(function (config) {
if (requests === 0) {
NProgress.start();
}
requests++;
return config;
}, function (error) {
return Promise.reject(error);
});
axios.interceptors.response.use(function (response) {
requests--;
if (requests === 0) {
NProgress.done();
}
return response;
}, function (error) {
return Promise.reject(error);
});
- Make a fancy loading bar even without Turbolinks/Pjax! Bind it to
$(document).ready
and$(window).load
.
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()
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
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);
Promise: By passing A+ spec promises to promise()
, it will automatically track progress for those promises as they complete.
NProgress.promise(new Promise((resolve) => setTimeout(resolve(), 1000)));
NProgress.promise(new Promise((resolve) => setTimeout(resolve(), 500)));
Get the status value: To get the status value, use .status
Get the settings value: To get the settings value, use .settings
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 class='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' });
specify this to change the selectors for the bar and spinner. (default: div.bar
& div.spinner
)
NProgress.configure({ spinnerSelector: 'div.spin' });
specify this to change the aria-label for the bar and spinner. (default: processing request
)
NProgress.configure({ barLabel: 'fetching data' });
Just edit dist/accessible-nprogress.css
to your liking. Tip: you probably only want to find and replace occurrences of #29d
.
The included CSS file is pretty minimal... in fact, feel free to scrap it and make your own!
Bugs and requests: submit them through the project's issues tracker.
Acessible NProgress © 2021, Nicholas Mackey. Released under the MIT License.
Authored and maintained by Nicholas Mackey with help from contributors.