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

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();
});