You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
308 lines
9.7 KiB
308 lines
9.7 KiB
var ComponentsNoUiSliders = function() {
|
|
|
|
var demo2 = function() {
|
|
var connectSlider = document.getElementById('demo2');
|
|
|
|
noUiSlider.create(connectSlider, {
|
|
start: [20],
|
|
connect: false,
|
|
range: {
|
|
'min': 0,
|
|
'max': 100
|
|
}
|
|
});
|
|
}
|
|
|
|
var demo3 = function() {
|
|
var connectSlider = document.getElementById('demo3');
|
|
|
|
noUiSlider.create(connectSlider, {
|
|
start: [20, 80],
|
|
connect: false,
|
|
range: {
|
|
'min': 0,
|
|
'max': 100
|
|
}
|
|
});
|
|
|
|
var connectBar = document.createElement('div'),
|
|
connectBase = connectSlider.getElementsByClassName('noUi-base')[0],
|
|
connectHandles = connectSlider.getElementsByClassName('noUi-origin');
|
|
|
|
// Give the bar a class for styling and add it to the slider.
|
|
connectBar.className += 'connect';
|
|
connectBase.appendChild(connectBar);
|
|
|
|
connectSlider.noUiSlider.on('update', function( values, handle ) {
|
|
|
|
// Pick left for the first handle, right for the second.
|
|
var side = handle ? 'right' : 'left',
|
|
// Get the handle position and trim the '%' sign.
|
|
offset = (connectHandles[handle].style.left).slice(0, - 1);
|
|
|
|
// Right offset is 100% - left offset
|
|
if ( handle === 1 ) {
|
|
offset = 100 - offset;
|
|
}
|
|
|
|
connectBar.style[side] = offset + '%';
|
|
});
|
|
}
|
|
|
|
var demo4 = function() {
|
|
//** init the select
|
|
var select = document.getElementById('demo4_select');
|
|
|
|
// Append the option elements
|
|
for ( var i = -20; i <= 40; i++ ) {
|
|
var option = document.createElement("option");
|
|
option.text = i;
|
|
option.value = i;
|
|
select.appendChild(option);
|
|
}
|
|
|
|
//** init the slider
|
|
var html5Slider = document.getElementById('demo4');
|
|
|
|
noUiSlider.create(html5Slider, {
|
|
start: [ 10, 30 ],
|
|
connect: true,
|
|
range: {
|
|
'min': -20,
|
|
'max': 40
|
|
}
|
|
});
|
|
|
|
//** init the input
|
|
var inputNumber = document.getElementById('demo4_input');
|
|
|
|
html5Slider.noUiSlider.on('update', function( values, handle ) {
|
|
|
|
var value = values[handle];
|
|
|
|
if ( handle ) {
|
|
inputNumber.value = value;
|
|
} else {
|
|
select.value = Math.round(value);
|
|
}
|
|
});
|
|
|
|
select.addEventListener('change', function(){
|
|
html5Slider.noUiSlider.set([this.value, null]);
|
|
});
|
|
|
|
inputNumber.addEventListener('change', function(){
|
|
html5Slider.noUiSlider.set([null, this.value]);
|
|
});
|
|
}
|
|
|
|
var demo5 = function() {
|
|
var nonLinearSlider = document.getElementById('demo5');
|
|
|
|
noUiSlider.create(nonLinearSlider, {
|
|
connect: true,
|
|
behaviour: 'tap',
|
|
start: [ 500, 4000 ],
|
|
range: {
|
|
// Starting at 500, step the value by 500,
|
|
// until 4000 is reached. From there, step by 1000.
|
|
'min': [ 0 ],
|
|
'10%': [ 500, 500 ],
|
|
'50%': [ 4000, 1000 ],
|
|
'max': [ 10000 ]
|
|
}
|
|
});
|
|
|
|
// Write the CSS 'left' value to a span.
|
|
function leftValue ( handle ) {
|
|
return handle.parentElement.style.left;
|
|
}
|
|
|
|
var lowerValue = document.getElementById('demo5_lower-value'),
|
|
upperValue = document.getElementById('demo5_upper-value'),
|
|
handles = nonLinearSlider.getElementsByClassName('noUi-handle');
|
|
|
|
// Display the slider value and how far the handle moved
|
|
// from the left edge of the slider.
|
|
nonLinearSlider.noUiSlider.on('update', function ( values, handle ) {
|
|
if ( !handle ) {
|
|
lowerValue.innerHTML = values[handle] + ', ' + leftValue(handles[handle]);
|
|
} else {
|
|
upperValue.innerHTML = values[handle] + ', ' + leftValue(handles[handle]);
|
|
}
|
|
});
|
|
}
|
|
|
|
var demo6 = function() {
|
|
// Store the locked state and slider values.
|
|
var lockedState = false,
|
|
lockedSlider = false,
|
|
lockedValues = [60, 80],
|
|
slider1 = document.getElementById('demo6_slider1'),
|
|
slider2 = document.getElementById('demo6_slider2'),
|
|
lockButton = document.getElementById('demo6_lockbutton'),
|
|
slider1Value = document.getElementById('demo6_slider1-span'),
|
|
slider2Value = document.getElementById('demo6_slider2-span');
|
|
|
|
// When the button is clicked, the locked
|
|
// state is inverted.
|
|
lockButton.addEventListener('click', function(){
|
|
lockedState = !lockedState;
|
|
this.textContent = lockedState ? 'unlock' : 'lock';
|
|
});
|
|
|
|
function crossUpdate ( value, slider ) {
|
|
|
|
// If the sliders aren't interlocked, don't
|
|
// cross-update.
|
|
if ( !lockedState ) return;
|
|
|
|
// Select whether to increase or decrease
|
|
// the other slider value.
|
|
var a = slider1 === slider ? 0 : 1, b = a ? 0 : 1;
|
|
|
|
// Offset the slider value.
|
|
value -= lockedValues[b] - lockedValues[a];
|
|
|
|
// Set the value
|
|
slider.noUiSlider.set(value);
|
|
}
|
|
|
|
noUiSlider.create(slider1, {
|
|
start: 60,
|
|
|
|
// Disable animation on value-setting,
|
|
// so the sliders respond immediately.
|
|
animate: false,
|
|
range: {
|
|
min: 50,
|
|
max: 100
|
|
}
|
|
});
|
|
|
|
noUiSlider.create(slider2, {
|
|
start: 80,
|
|
animate: false,
|
|
range: {
|
|
min: 50,
|
|
max: 100
|
|
}
|
|
});
|
|
|
|
slider1.noUiSlider.on('update', function( values, handle ){
|
|
slider1Value.innerHTML = values[handle];
|
|
});
|
|
|
|
slider2.noUiSlider.on('update', function( values, handle ){
|
|
slider2Value.innerHTML = values[handle];
|
|
});
|
|
|
|
function setLockedValues ( ) {
|
|
lockedValues = [
|
|
Number(slider1.noUiSlider.get()),
|
|
Number(slider2.noUiSlider.get())
|
|
];
|
|
}
|
|
|
|
slider1.noUiSlider.on('change', setLockedValues);
|
|
slider2.noUiSlider.on('change', setLockedValues);
|
|
|
|
// The value will be send to the other slider,
|
|
// using a custom function as the serialization
|
|
// method. The function uses the global 'lockedState'
|
|
// variable to decide whether the other slider is updated.
|
|
slider1.noUiSlider.on('slide', function( values, handle ){
|
|
crossUpdate(values[handle], slider2);
|
|
});
|
|
|
|
slider2.noUiSlider.on('slide', function( values, handle ){
|
|
crossUpdate(values[handle], slider1);
|
|
});
|
|
}
|
|
|
|
var demo7 = function() {
|
|
var softSlider = document.getElementById('demo7');
|
|
|
|
noUiSlider.create(softSlider, {
|
|
start: 50,
|
|
range: {
|
|
min: 0,
|
|
max: 100
|
|
},
|
|
pips: {
|
|
mode: 'values',
|
|
values: [20, 80],
|
|
density: 4
|
|
}
|
|
});
|
|
|
|
softSlider.noUiSlider.on('change', function ( values, handle ) {
|
|
if ( values[handle] < 20 ) {
|
|
softSlider.noUiSlider.set(20);
|
|
} else if ( values[handle] > 80 ) {
|
|
softSlider.noUiSlider.set(80);
|
|
}
|
|
});
|
|
}
|
|
|
|
var demo8 = function() {
|
|
var tooltipSlider = document.getElementById('demo8');
|
|
|
|
noUiSlider.create(tooltipSlider, {
|
|
start: [40, 50],
|
|
connect: true,
|
|
range: {
|
|
'min': 30,
|
|
'30%': 40,
|
|
'max': 50
|
|
}
|
|
});
|
|
|
|
var tipHandles = tooltipSlider.getElementsByClassName('noUi-handle'),
|
|
tooltips = [];
|
|
|
|
// Add divs to the slider handles.
|
|
for ( var i = 0; i < tipHandles.length; i++ ){
|
|
tooltips[i] = document.createElement('div');
|
|
tipHandles[i].appendChild(tooltips[i]);
|
|
}
|
|
|
|
// Add a class for styling
|
|
tooltips[1].className += 'noUi-tooltip';
|
|
// Add additional markup
|
|
tooltips[1].innerHTML = '<strong>Value: </strong><span></span>';
|
|
// Replace the tooltip reference with the span we just added
|
|
tooltips[1] = tooltips[1].getElementsByTagName('span')[0];
|
|
|
|
// Add a class for styling
|
|
tooltips[0].className += 'noUi-tooltip';
|
|
// Add additional markup
|
|
tooltips[0].innerHTML = '<strong>Value: </strong><span></span>';
|
|
// Replace the tooltip reference with the span we just added
|
|
tooltips[0] = tooltips[0].getElementsByTagName('span')[0];
|
|
|
|
// When the slider changes, write the value to the tooltips.
|
|
tooltipSlider.noUiSlider.on('update', function( values, handle ){
|
|
tooltips[handle].innerHTML = values[handle];
|
|
});
|
|
}
|
|
|
|
return {
|
|
//main function to initiate the module
|
|
init: function() {
|
|
demo2();
|
|
demo3();
|
|
demo4();
|
|
demo5();
|
|
demo6();
|
|
demo7();
|
|
demo8();
|
|
}
|
|
|
|
};
|
|
|
|
}();
|
|
|
|
jQuery(document).ready(function() {
|
|
ComponentsNoUiSliders.init();
|
|
});
|