html input range step as an array of values

前端 未结 4 686
太阳男子
太阳男子 2020-12-05 22:17

I\'ve been playing around with the input type=range for the first time, and ideally I\'d like to set the step value to an array of values. I looked over the spe

相关标签:
4条回答
  • 2020-12-05 22:27

    You can achieve this by storing the values in an array and using the slider as the indexer for the array. This example will step through 1, 3, 5, 10, 20, 50, 100 as you slide.

    HTML

    <input id="input" type="range" min="0" value="0" max="6" step="1">
    <div id="output"></div>
    

    JS

    var values = [1,3,5,10,20,50,100];    //values to step to
    
    var input = document.getElementById('input'),
       output = document.getElementById('output');
    
    input.oninput = function(){
        output.innerHTML = values[this.value];
    };
    input.oninput(); //set default value
    

    Fiddle: http://jsfiddle.net/26xk026z/1/

    0 讨论(0)
  • 2020-12-05 22:32

    Having the next input:

        <input id="currentTimeInput" type="range" value="1" min="0" max="60" oninput="toggleSteps(this);" list=mapsettings>
        <datalist id=mapsettings>
            <option>0</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
            <option>5</option>
            <option>6</option>
            <option>7</option>
            <option>8</option>
            <option>9</option>
            <option>10</option>
            <option>20</option>
            <option>30</option>
            <option>40</option>
            <option>50</option>
            <option>60</option>
        </datalist>
    

    Here is my function to change the steps by 1 (0-10) and 10 (10-60)

    function toggleSteps(element) {
        var minutes = parseInt(element.value);
        if (minutes > 10) {
            element.step = 10;
        } else {
            element.step = 1;
        }
    }
    
    0 讨论(0)
  • 2020-12-05 22:36

    According to the W3C spec, the values for step can be "any" or a positive floating-point number. That's it.

    The step attribute, if specified, must either have a value that is a valid floating-point number that parses to a number that is greater than zero, or must have a value that is an ASCII case-insensitive match for the string "any".

    0 讨论(0)
  • 2020-12-05 22:37

    Karmacon's answer works just fine, but don't forget to add the attribute aria-valuetext to the input element. It will help screen readers read out the correct value.

    MDN provides a good example: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_slider_role#Example_2_Text_Values

    0 讨论(0)
提交回复
热议问题