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:
unconstrained
behaviour (#747, #815, #913) - Added:
setHandle
API (#917) - Changed: point to
nouislider.js
inpackage.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
filter
option is now called for all pips (#754); - Added: The
filter
option can now return-1
to hide a pip (#754); - Added:
keyboardSupport
option (#867, #895); - Added:
documentElement
option (#821);
- Change:
null
options are now handled consistently (#856); - Fixed: Missing transform origin in IE9 (#870);
- Fixed:
padding
on 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-target
outside of.noUi-base
(#842); - Fixed:
.noUi-origin
moving out of the page causes horizontal scrolling (#852); - Fixed: Relative
.noUi-handle
has 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-origin
instead of.noUi-handle
; - Added: A
.noUi-connects
element holding all.noUi-connect
elements; - Added:
[data-value]
property for.noUi-value
in pips (#733); - Added:
padding
option can now take an array for different padding values at both sides of a slider (#822); - Removed:
useRequestAnimationFrame
option. No longer needed with CSS transforms; - Removed:
multitouch
option. Now enabled by default; - Fixed: Slider could ignore end events it should handle (#704, #805, #834);
- Fixed: Stop depending on array type (#801);
- Fixed:
set
method might bypass margin option (#823); - Fixed: Alignment of pips for RTL sliders (#795);
- Fixed: Several issues regarding pips (#812, #826, #832);
- Added:
multitouch
option (#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:
removePips
method; - Added: aria support (#685);
- Added:
ariaFormat
option (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
ownerDocument
instead ofdocument
(#767);
- Added: Version number to exceptions;
- Added:
noUiSlider.version
holds current version number; - Added: Throw exception on invalid
pips
configuration (#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
padding
option (#711); - Added: Re-introduced
.noUi-handle-lower
and.noUi-handle-upper
classes removed in 9.0.0; - Added: Compatibility for legacy
connect
options removed in 9.0.0;
- Added: Support for more than 2 handles;
- Added:
format
option can be updated (#641); - Added:
reset
method the return slider to start values (#673); - Change:
connect
option is now implemented as a separate node; - Change: all event arguments, including the handle number, are now in slider order;
- Change:
updateOptions
now modifies the original options object. The reference inslider.noUiSlider.options
remains up to date (#678); - Change: more events fire when using various
behaviour
options (#664); - Change: on
rtl
sliders, handles are now visually positioned from the slidersright
/bottom
edge; - Change: events for
rtl
sliders now fire in the same order as forltr
sliders (with incremental handleNumbers); - Change: internal
Spectrum
component is no longerdirection
aware; - Change:
limit
andmargin
must be divisible bystep
(if set); - Removed:
.noUi-stacking
class. Handles now stack themselves; Removed(returned in 9.1.0):.noUi-handle-lower
and.noUi-handle-upper
classes;- Removed:
.noUi-background
. Use.noUi-target
instead; Removed(backward compatibility in 9.1.0):connect: 'lower'
andconnect: 'upper'
. These settings are replaced byconnect: [true, false]
;- Fixed: default tooltip color (#687);
- Fixed:
margin
andlimit
calculated improperly after callingupdateOptions
with a newrange
option; - Fixed:
range
option 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';