【问题标题】:jQuery UI slider - prevent multiple handles from overlappingjQuery UI 滑块 - 防止多个句柄重叠
【发布时间】:2015-03-17 22:37:39
【问题描述】:

我有一个带四个手柄的滑块。当您拖动它们时,禁止它们相互交叉的最简单方法是什么?我尝试比较它们的 position.left 值并在它们等于相邻句柄时返回 false,但这完全消除了拖动。理想情况下,您不能将其拖动到小于每个手柄之间选择下拉菜单的宽度,但如果我能阻止它们交叉,我可能会到达那里。

http://jsfiddle.net/0jqs0eeh/7/

$(".pct-slider").slider({
    min: 0,
    max: 1440,
    step: 15,
    range: false,
    values: [180, 435, 1080, 1320],
    create: function (event, ui) {
        $.each( initialValues, function(i, v){
            updateValue({
                value: v,
                handle: $('.ui-slider-handle').eq(i) 
            });
        });
    },
    slide: function (event, ui) {
        var handleIndex = $(ui.handle).index();
        updateValue(ui);
        positionSelects();
    }
});

【问题讨论】:

    标签: javascript jquery jquery-ui slider position


    【解决方案1】:

    您可以使用选择器$('a', event.target).index(ui.handle) 访问句柄的index。

    从那里,您可以访问下一个/上一个句柄值并比较当前句柄的值是否在它们之间。如果是,则返回 false 并防止句柄重叠。

    在下面的示例中,值 25 是硬编码填充,用于防止句柄重叠。

    Updated Example

    slide: function (event, ui) {
        var handleIndex = $('a', event.target).index(ui.handle),
            curr = ui.values[handleIndex],
            next = ui.values[handleIndex + 1] - 25,
            prev = ui.values[handleIndex - 1] + 25;
    
        if (curr > next || curr < prev) {
            return false;
        }
    
        updateValue(ui);
        positionSelects();
    }
    

    【讨论】:

    • 这太棒了。出于某种原因 ui.values[handleIndex] 在我的开发人员上返回 undefined ...我想知道这是否是 jquery 版本问题。我基本上复制了确切的代码并执行 console.log(curr) 或任何 vars 在控制台中返回 undefined 。我想知道是否存在适用于 jsfiddle 但可能导致我的环境出现问题的语法问题?
    • @KirkRoss 我想问题出在handleIndex 上。它在返回什么?也许您的标记不同并且选择了错误的index?
    • handleIndex 正常...我认为这是它尝试使用 ui.values[handleIndex] 获取值的问题。有没有不同的/更字面的方式来写那行?像 $slider("values", handleIndex) 或者我可以尝试这样的东西?
    • @KirkRoss 我很确定这是检索值的唯一方法。如果你记录数组怎么办? console.log(ui.values).. 将其与 handleIndex 进行比较以查看索引是否在数组范围内。如果你能提供一个例子,我来看看。
    • 这很奇怪......当我记录 ui.values[0] 的硬代码时,它返回第一个句柄的值,但是当我记录 handleIndex 时——由 $('a' 设置, event.target).index(ui.handle); -- 然后它返回 4 作为第一个句柄的索引,5 作为第二个句柄的索引,依此类推。我的 HTML 中的某些内容正在抵消索引号。我明天必须深入研究这个……现在得下班了。非常感谢您的帮助。
    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2011-04-12
    • 2011-12-12
    • 2010-11-15
    相关资源
    最近更新 更多