0

Есть вот такой скриптик на jQuery UI:

<script>
    $(function () {
        //slider range
        var sliderRange = $('#slider-range');
        var sliderMin = sliderRange.data('min');
        var sliderMax = sliderRange.data('max');
        var sliderStart = sliderRange.data('start');
        var sliderEnd = sliderRange.data('end');
        var sliderStep = sliderRange.data('step');

        $('#min').val(sliderMin);
        $('#max').val(sliderMax);
        $('#start').val(sliderStart);
        $('#end').val(sliderEnd);
        $('#step').val(sliderStep);
        // $('#amount').text(sliderStart +' - '+ sliderEnd +' р.');

        sliderRange.slider({
            range: true,
            min: sliderMin,
            max: sliderMax,
            step: sliderStep,
            values: [sliderStart, sliderEnd],
            slide: function (event, ui) {
                // $('#amount').text(ui.values[0] +' - '+ ui.values[1] +' р.');
                $('#start').val(ui.values[0]);
                $('#end').val(ui.values[1]);
            }
        });

    });
</script>
<div id="slider-range" data-min="0.8" data-max="8.5" data-start="0"
data-end="8.5" data-step="0.65" class="ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all"></div>
<input type="hidden" name="start" id="start" value="7500" />
<input type="hidden" name="end" id="end" value="20000" />

В нем задан шаг 0.65. Но можно ли сделать, чтобы шаги задавались вручную в коде? Т.е. нужно не равномерная смена значений, а примерно так: 0.9, 1.5, 1.8, 2.

Заранее спасибо.

1 ответ 1

2

Конечно, можно!

Вам, однако, придётся вручную пересчитывать "равномерное" значение, считанное со слайдера, в "неравномерное", которое вы хотите получить.

Вам придётся обрабатывать изменения слайдера примерно так:

// slider value in [0..3]
if (sliderValue < 1)
    realValue = 0.9 + (1.5 - 0.9) * sliderValue;
else if (sliderValue < 2)
    realValue = 1.5 + (1.8 - 1.5) * (sliderValue - 1);
else // sliderValue in [2..3]
    realValue = 1.8 + (2 - 1.8) * (sliderValue - 2);

Видите, как обобщить на произвольное количество и значения шагов?

Более общим решением было бы просто применение подходящей функции к sliderValue: например, log. То, что в коде сверху -- это по существу применение кусочно-линейной функции.

(Disclaimer: Я не веб-программист, мой код наверное не на правильном JS, и я не знаю, куда именно при помощи jQuery надо навешивать обработчик, но вы наверняка знаете и так.)

3
  • Спасибо. Принцип понял. Попробую. Я тоже в jQuery не очень
    – acidernt
    18 ноя 2012 в 14:37
  • @inferus: удачи!
    – VladD
    18 ноя 2012 в 14:43
  • Что то я так и не понял, как это внедрить. Теоретически все верно, но в скрипте нет такого понятия, как value. Там есть min и max
    – acidernt
    18 ноя 2012 в 19:47

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.