noUiSlider is a lightweight JavaScript range slider.
- No dependencies
- All modern browsers and IE > 9 are supported
- Fully responsive
- Multi-touch support on Android, iOS and Windows devices
- Tons of examples and answered Stack Overflow questions
As of release 12.0.0, noUiSlider is licensed MIT. You can use it for free and without any attribution, in any personal or commercial project.
An extensive documentation, including examples, options and configuration details, is available here: noUiSlider documentation.
- Added:
unconstrainedbehaviour (#747, #815, #913) - Added:
setHandleAPI (#917) - Changed: point to
nouislider.jsinpackage.json.main(#921)
- Change: License changed to MIT;
- Change: Build process is now based on NPM scripts, phasing out the Grunt task runner.
- Fixed: Aria values are now as per spec (#889);
- Change: Pips formatting are now written as HTML (#875);
- Change: The
filteroption is now called for all pips (#754); - Added: The
filteroption can now return-1to hide a pip (#754); - Added:
keyboardSupportoption (#867, #895); - Added:
documentElementoption (#821);
- Change:
nulloptions are now handled consistently (#856); - Fixed: Missing transform origin in IE9 (#870);
- Fixed:
paddingon one side of the slider could not exceed50%(#865);
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 does not 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)
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';