2

我有一个带有两个手柄的 jQuery 滑块。我希望根据第二个手柄将第一个锁定到位。

我试过检查滑动事件的值,然后将第一个句柄设置回它的锁定位置,但它基本上忽略了我设置的值并继续滑动。

我已经让它与停止事件一起工作,但它非常笨重。

我正在使用从服务器端生成的 JSON 对象来填充我的滑块。这是我的停止事件代码:

   $(clientID).slider({
        range: true,
        max: slider.max,
        values: [slider.minVal, slider.maxVal],
        change: afterSliderChanged,
        stop: onSliderStop
    });

    function onSliderStop(event, ui) {
    for (i in sliders.sliders) {
        var slider = sliders.sliders[i];
        var clientID = slider.cellType + "_" + slider.objectID + "_null";

        if (this.id == clientID) {
            if (ui.values[0].toString() == slider.max.toString()) {
                var values = $(this).slider('option', 'values');
                $(this).slider('option', 'values', [parseInt(slider.max - 1), parseInt(values[1])]);
            }
        }
    }

有人有想法么?

让我知道是否需要详细说明。

谢谢!丹尼尔布鲁尔

4

2 回答 2

1

这是一个快速而肮脏的示例,说明如何相对于被拖动的手柄锁定另一个手柄:

var offset = 40;
$('#slider').slider({
    range: true,
    max: 600,
    values: [40, 80],
    slide: function(e,ui){
        if (ui.value == ui.values[0]) {
            $(this).slider('values',1, ui.value+offset);
        } else {
            $(this).slider('values',0, ui.value-offset);
        }
    }
});

应该可以帮助您弄清楚如何做您想做的事情。

工作示例:http: //jsfiddle.net/cBHdD/

于 2010-02-03T20:43:02.277 回答
0

这是@PetersenDidit 的jsfiddle 的一个稍微不那么快速的n-dirty 版本,它锁定了相对于彼此的句柄,并且还在滑块的末端夹住了它们之间的偏移量,因此范围不能在maxOff. 关键是return false,要防止 jquery-ui 应用当前拖动值:

var max = 600;
var maxOff = 40;

$('#slider').slider({
    range: true,
    max: max,
    values: [40, 80],
    slide: function(e,ui){
        if (ui.value == ui.values[0]) {
            $(this).slider( 'values', 1, ui.value+maxOff);
            if (ui.value >= max - maxOff) {
                $(this).slider( 'values', 0, max - maxOff);
                return false;
            }
        } else {
            $(this).slider( 'values',0, ui.value-maxOff);
            if (ui.value <= maxOff) {
                $(this).slider( 'values', 1, maxOff);
                return false;
            }
        }
    }
});

http://jsfiddle.net/tbWE5/

于 2013-10-22T16:41:34.777 回答