noUiSlider is lightweight JavaScript range slider.
- No dependencies
- All modern browsers and IE > 9 are supported
- Fully responsive
- Touch support on Android, iOS and Windows devices
- Tons of examples and answered Stack Overflow questions
noUiSlider is licensed WTFPL. You can use it for free and without any attribution, in any personal or commercial project. You may also fork the project and re-release it under another license you prefer.
An extensive documentation, including examples, options and configuration details, is available here: noUiSlider documentation.
bower install nouislider --save
npm (package)
npm install nouislider --save
Refactor of source code. There are no meaningful changes in the distributed files;
- Fixed: Slider ignores clicks on
.noUi-targetoutside of.noUi-base(#842); - Fixed:
.noUi-originmoving out of the page causes horizontal scrolling (#852); - Fixed: Relative
.noUi-handlehas unintended margin (#854);
noUiSlider 11 doesn't include any breaking API changes. Unless major changes were made to the stylesheet or you specifically depend on the handle/connect order in the DOM, there should be no issues upgrading.
- Change: Use CSS transforms for handle movement, resulting in a massive performance improvement (#718);
- Change: Support multitouch by default;
- Change: Handle stacking is now on
.noUi-origininstead of.noUi-handle; - Added: A
.noUi-connectselement holding all.noUi-connectelements; - Added:
[data-value]property for.noUi-valuein pips (#733); - Added:
paddingoption can now take an array for different padding values at both sides of a slider (#822); - Removed:
useRequestAnimationFrameoption. No longer needed with CSS transforms; - Removed:
multitouchoption. Now enabled by default; - Fixed: Slider could ignore end events it should handle (#704, #805, #834);
- Fixed: Stop depending on array type (#801);
- Fixed:
setmethod might bypass margin option (#823); - Fixed: Alignment of pips for RTL sliders (#795);
- Fixed: Several issues regarding pips (#812, #826, #832);
- Added:
multitouchoption (#793);
- Change: Change event listeners to be passive (#785);
- Fixed: Pips are now updated when calling
updateOptions(#669); - Fixed: Content Security Policy issue with pips;
- Added:
removePipsmethod; - Added: aria support (#685);
- Added:
ariaFormatoption (controlsaria-valuetext); - Fixed: throw a better error when mistakenly trying to initialize noUiSlider with
null(#658); - Fixed: Made order of events consistent and documented it (#775);
- Fixed: Border radius of connect bar, white space wrapping of tooltips (#773, #774);
- Fixed: Slider now uses
ownerDocumentinstead ofdocument(#767);
- Added: Version number to exceptions;
- Added:
noUiSlider.versionholds current version number; - Added: Throw exception on invalid
pipsconfiguration (#721); - Added: Merged pull request that uses less preprocessor to generate CSS (#735);
- Fixed: Slider not properly handling multitouch (#700, #704);
- Fixed: Removed a querySelector for the currently active handle (#720);
- Fixed: Removed iOS/webkit flashes on tap;
- Fixed: Incorrect error when using margin/limit with a step smaller than 0 (#736);
- Fixed: Drag option using incorrect cursor arrows (#681);
- Added: New
paddingoption (#711); - Added: Re-introduced
.noUi-handle-lowerand.noUi-handle-upperclasses removed in 9.0.0; - Added: Compatibility for legacy
connectoptions removed in 9.0.0;
- Added: Support for more than 2 handles;
- Added:
formatoption can be updated (#641); - Added:
resetmethod the return slider to start values (#673); - Change:
connectoption is now implemented as a separate node; - Change: all event arguments, including the handle number, are now in slider order;
- Change:
updateOptionsnow modifies the original options object. The reference inslider.noUiSlider.optionsremains up to date (#678); - Change: more events fire when using various
behaviouroptions (#664); - Change: on
rtlsliders, handles are now visually positioned from the slidersright/bottomedge; - Change: events for
rtlsliders now fire in the same order as forltrsliders (with incremental handleNumbers); - Change: internal
Spectrumcomponent is no longerdirectionaware; - Change:
limitandmarginmust be divisible bystep(if set); - Removed:
.noUi-stackingclass. Handles now stack themselves; Removed(returned in 9.1.0):.noUi-handle-lowerand.noUi-handle-upperclasses;- Removed:
.noUi-background. Use.noUi-targetinstead; Removed(backward compatibility in 9.1.0):connect: 'lower'andconnect: 'upper'. These settings are replaced byconnect: [true, false];- Fixed: default tooltip color (#687);
- Fixed:
marginandlimitcalculated improperly after callingupdateOptionswith a newrangeoption; - Fixed:
rangeoption was required in update, even when not updating it (#682); - Fixed: Cursor styling is now consistent for disabled handles and sliders (#644);
- Fixed: Sliders now ignore touches when the screen is touched multiple times (#649, #663, #668);
Devices/browsers tested:
- Surface Pro 3 (Windows 10)
- iPad Air 2 (iOS 9.3)
- iPad 3 (iOS 8.4)
- Moto E (Android 5.1, Chrome)
- Lumia 930 (WP8.1, IE10 mobile)
- Lumia 930 (WM10, Edge)
- OnePlus 3 (Android 6)
- Chrome
- Firefox
- Asus S400C (Windows 10, Touch + mouse)
- Chrome
- Firefox
- Edge
- IE11
- IE10 (Emulated)
- IE9 (Emulated)
This library is UMD compatible, so you can use it in this way:
var noUiSlider = require('nouislider');
var slider = document.getElementById('slider');
noUiSlider.create(slider, {
start: 40,
connect: "lower",
range: {
min: 0,
max: 100
}
});In order to use this with webpack, the easiest way to work with it is by using the ProvidePlugin:
// webpack.config.js
var webpack = require('webpack');
...
plugins: [
new webpack.ProvidePlugin({
noUiSlider: 'nouislider'
})
]
...If you're using ES6 imports, a simple import with side effect is enough:
import 'nouislider';