您可以通過return false;
取消slide
事件。
請參閱jsfiddle上的this link。
function setValues(stepIncrease) {
return function (event, ui) {
var slider = $("#" + this.id);
var currentValues = slider.slider("values");
var step = slider.slider("option")["step"];
if ((Math.abs(ui.values[0] - currentValues[0]) % (stepIncrease * step) != 0 || Math.abs(ui.values[1] - currentValues[1]) % (stepIncrease * step) != 0)){
return false;
};
slider.slider("values", ui.values);
var currentValues = slider.slider("values");
$("#" + this.id + "-values").html(currentValues[0] + ' ' + currentValues[1]);
};
};
並且在滑塊:
$(function() {
$("#slider-range-1-2").slider({
range: true,
min: 1,
max: 10,
step: 1,
values: [1, 10],
slide: setValues(2),
create: function(event, ui) {
var slider = $("#" + this.id);
var currentValues = slider.slider("values");
$("#" + this.id + "-values").html(currentValues[0] + ' ' + currentValues[1]);
}
});
});
UPD
這是函數來處理事件
function eventHandlerKeydown(slider, stepIncrease) {
return function(event) {
var step, curVal, min, max, newVal, index = $(event.target).data("ui-slider-handle-index");
switch (event.keyCode) {
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
event.preventDefault();
if (!slider.keySliding) {
slider.keySliding = true;
$(event.target).addClass("ui-state-active");
}
break;
}
step = slider.slider("option")["step"];
max = slider.slider("option")["max"];
min = slider.slider("option")["min"];
curVal = slider.slider("values")[index];
switch (event.keyCode) {
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
newVal = curVal + step * stepIncrease;
if (newVal > max) {
return;
}
slider.slider("values", index, newVal);
break;
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
newVal = curVal - step * stepIncrease;
if (newVal < min) {
return;
}
slider.slider("values", index, newVal);
break;
}
}
}
並且在滑塊:
$(function() {
var slider = $("#slider-range").slider({
...
});
var handlers = slider.children("a");
$.each(handlers, function(index, handler) {
$(handler).off('keydown');
$(handler).on({keydown: eventHandlerKeydown(slider, 1)});
});
});
和link to example。
P.S.我仍然認爲這有一個簡單的解決方案。
如果你想只能選擇開始或者我覺得@ user568109多年的到底是對
function showValues(event, ui) {
var values;
if (!ui.values) {
values = $("#" + event.target.id).slider("values");
} else {
values = ui.values;
}
if (values[0] == values[1]) {
return false;
} else {
var periodFrom;
values[0] % 1 == 0 ? periodFrom = 'beginnig of the year' : periodFrom = 'year-end';
var periodTo;
values[1] % 1 == 0 ? periodTo = 'beginnig of the year' : periodTo = 'year-end';
$("#" + event.target.id + "-values").html('From ' + periodFrom + ' ' + parseInt(values[0]) + '<br />to ' + periodTo + ' ' + parseInt(values[1]));
}
}
$(function() {
$("#slider").slider({
range: true,
min: 2010,
max: 2013.5,
step: 0.5,
values: [2010, 2013.5],
slide: showValues,
create: showValues,
change: showValues
});
});
例there
問題在於它似乎使滑塊生澀。抓取和拖動有時不會根據拖動的速度將滑塊移動到正確的位置,即使我正在從另一個手柄拖走。大概這是因爲一些拖曳事件過早受到干擾,導致有效的幻燈片被取消。 – BrenBarn
@BrenBarn,不,這是因爲條件允許每個鼠標移動只有一張幻燈片,請嘗試[this](http://jsfiddle.net/ostapische/jhXLC/4/)並參閱'if(){return false}; '聲明。在只有'N * step'間隔鼠標移動時取消事件之前,現在當鼠標移動'K * N * step'間隔時,它會滑動。 – ostapische
啊,我明白了。你能否更新你的答案來反映這一點? – BrenBarn