Задать вопрос

JQuery UI Slider изменение параметра step?

Столкнулся с такой проблемой нужно сделать слайдер с шагом 60, но первый шаг должен быть 30 (т.е. 30 60 120 180… ), вот как я это делаю:
$('#id').slider({<br>
	min: 30,<br>
	max: 720,<br>
	value: 30,<br>
	step: 30,<br>
	change: function (event, ui) {<br>
		console.log('change1 '+$(this).slider("value")+' step'+$(this).slider('option', 'step'))<br>
		if ( $(this).slider("value") > 60 ) {<br>
			newStep = 60<br>
			$(this).slider('option', 'step', newStep);<br>
			//slider_step = newStep<br>
		}<br>
		console.log('change2 '+$(this).slider("value")+' step'+$(this).slider('option', 'step'))<br>
	}<br>
})
после того как мы меняем параметр step на 60 value становится 90, при последующих изменениях слайдер ведет себя как и ожидается 90 > 150 210 270… изменяю значения слайдера простой кнопкой:
$('#btn').click(function(e){<br>
	var	step = $('#id').slider('option','step'),<br>
		value = $('#id').slider('value')<br>
	$('#id').slider('value', value+step)<br>
}




Я в замешательстве и не могу понять почему так происходит?



console.log():

step=60
change1 60 step30<br>
change2 90 step60
step=61
change1 60 step30<br>
change2 30 step61
step=59
change1 60 step30<br>
change2 89 step59
step=29
change1 60 step30<br>
change2 59 step29
  • Вопрос задан
  • 16564 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 1
ishaba
@ishaba Автор вопроса
похоже что придется сделать так stackoverflow.com/questions/7267676/jquery-slider-ui-dynamic-step-size но тогда нужно будет забивать все значения вручную
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
wscms
@wscms
А если step вы берете как
step = $('#id').slider('option','step')
то value не подобным ли образом надо брать?
value = $('#id').slider('option', 'value')
Ответ написан
@abrukish
Я бы попробовал вынести логику из change в клик по кнопке.

Избавляемся от куска ненужного кода, которые выполняется при каждом изменении (шаг будет 60 изначально):

$('#id').slider({
min: 30,
max: 720,
value: 30,
step: 60
})


Сама кнопка с на один раз проверкой:

$('#btn').click(function(e){
var step = $('#id').slider('option','step'), value = $('#id').slider('value');

if ( value < 60 )
step = 30;

$('#id').slider('value', value+step);
}
Ответ написан
megahertz
@megahertz
full stack разработчик
Как было сказано выше, тут только вручную задавать значения
$('#id').slider({
    min: 30,
    max: 720,
    value: 30,
    step: 30,
    slide: function (event, ui) {
        if (ui.value > 30 && ui.value % 60 != 0) {
            $(this).slider("value", ui.value + 30);
                return false;
        }
    }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы