318 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			318 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 
 | |
| /*********************
 | |
|   basic example
 | |
| **********************/
 | |
| 
 | |
| var slider = document.getElementById('slider');
 | |
| 
 | |
| noUiSlider.create(slider, {
 | |
|     start: [20, 80],
 | |
|     connect: true,
 | |
|     range: {
 | |
|         'min': 0,
 | |
|         'max': 100
 | |
|     }
 | |
| });
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|   Colorpicker
 | |
| **********************/
 | |
| 
 | |
| var resultElement = document.getElementById('result');
 | |
| var sliders = document.getElementsByClassName('sliders');
 | |
| var colors = [0, 0, 0];
 | |
| 
 | |
| [].slice.call(sliders).forEach(function (slider, index) {
 | |
| 
 | |
|     noUiSlider.create(slider, {
 | |
|         start: 127,
 | |
|         connect: [true, false],
 | |
|         orientation: "vertical",
 | |
|         range: {
 | |
|             'min': 0,
 | |
|             'max': 255
 | |
|         },
 | |
|         format: wNumb({
 | |
|             decimals: 0
 | |
|         })
 | |
|     });
 | |
| 
 | |
|     // Bind the color changing function to the update event.
 | |
|     slider.noUiSlider.on('update', function () {
 | |
| 
 | |
|         colors[index] = slider.noUiSlider.get();
 | |
| 
 | |
|         var color = 'rgb(' + colors.join(',') + ')';
 | |
| 
 | |
|         resultElement.style.background = color;
 | |
|         resultElement.style.color = color;
 | |
|     });
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|   Using HTML5 input elements
 | |
| **********************/
 | |
| 
 | |
| var select = document.getElementById('input-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);
 | |
| }
 | |
| 
 | |
| var html5Slider = document.getElementById('html5');
 | |
| 
 | |
| noUiSlider.create(html5Slider, {
 | |
|     start: [10, 30],
 | |
|     connect: true,
 | |
|     range: {
 | |
|         'min': -20,
 | |
|         'max': 40
 | |
|     }
 | |
| });
 | |
| 
 | |
| var inputNumber = document.getElementById('input-number');
 | |
| 
 | |
| 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]);
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|   Non linear slider
 | |
| **********************/
 | |
| 
 | |
| var nonLinearSlider = document.getElementById('nonlinear');
 | |
| 
 | |
| 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]
 | |
|     }
 | |
| });
 | |
| 
 | |
| var nodes = [
 | |
|     document.getElementById('lower-value'), // 0
 | |
|     document.getElementById('upper-value')  // 1
 | |
| ];
 | |
| 
 | |
| // Display the slider value and how far the handle moved
 | |
| // from the left edge of the slider.
 | |
| nonLinearSlider.noUiSlider.on('update', function (values, handle, unencoded, isTap, positions) {
 | |
|     nodes[handle].innerHTML = values[handle] + ', ' + positions[handle].toFixed(2) + '%';
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|   Locking sliders together
 | |
| **********************/
 | |
| 
 | |
| var lockedState = false;
 | |
| var lockedSlider = false;
 | |
| var lockedValues = [60, 80];
 | |
| 
 | |
| var slider1 = document.getElementById('slider1');
 | |
| var slider2 = document.getElementById('slider2');
 | |
| 
 | |
| var lockButton = document.getElementById('lockbutton');
 | |
| var slider1Value = document.getElementById('slider1-span');
 | |
| var slider2Value = document.getElementById('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;
 | |
| 
 | |
|     // Invert a
 | |
|     var 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);
 | |
| 
 | |
| slider1.noUiSlider.on('slide', function (values, handle) {
 | |
|     crossUpdate(values[handle], slider2);
 | |
| });
 | |
| 
 | |
| slider2.noUiSlider.on('slide', function (values, handle) {
 | |
|     crossUpdate(values[handle], slider1);
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|     tooltip
 | |
| **********************/
 | |
| 
 | |
| var hidingTooltipSlider = document.getElementById('slider-hide');
 | |
| 
 | |
| noUiSlider.create(hidingTooltipSlider, {
 | |
|     range: {
 | |
|         min: 0,
 | |
|         max: 100
 | |
|     },
 | |
|     start: [20, 80],
 | |
|     tooltips: true
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|   Colored Connect Elements
 | |
| **********************/
 | |
| 
 | |
| var slider = document.getElementById('slider-color');
 | |
| 
 | |
| noUiSlider.create(slider, {
 | |
|     start: [4000, 8000, 12000, 16000],
 | |
|     connect: [false, true, true, true, true],
 | |
|     range: {
 | |
|         'min': [2000],
 | |
|         'max': [20000]
 | |
|     }
 | |
| });
 | |
| 
 | |
| var connect = slider.querySelectorAll('.noUi-connect');
 | |
| var classes = ['c-1-color', 'c-2-color', 'c-3-color', 'c-4-color', 'c-5-color'];
 | |
| 
 | |
| for (var i = 0; i < connect.length; i++) {
 | |
|     connect[i].classList.add(classes[i]);
 | |
| }
 | |
| 
 | |
| /*********************
 | |
|     toggle slider
 | |
| **********************/
 | |
| 
 | |
| var toggleSlider = document.getElementById('slider-toggle');
 | |
| 
 | |
| noUiSlider.create(toggleSlider, {
 | |
|     orientation: "vertical",
 | |
|     start: 0,
 | |
|     range: {
 | |
|         'min': [0, 1],
 | |
|         'max': 1
 | |
|     },
 | |
|     format: wNumb({
 | |
|         decimals: 0
 | |
|     })
 | |
| });
 | |
| 
 | |
| toggleSlider.noUiSlider.on('update', function (values, handle) {
 | |
|     if (values[handle] === '1') {
 | |
|         toggleSlider.classList.add('off');
 | |
|     } else {
 | |
|         toggleSlider.classList.remove('off');
 | |
|     }
 | |
| });
 | |
| 
 | |
| 
 | |
| /*********************
 | |
|     Soft limits
 | |
| **********************/
 | |
| 
 | |
| var softSlider = document.getElementById('soft');
 | |
| 
 | |
| 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);
 | |
|     }
 | |
| }); |