jQuery-ui slider - 如何阻止两个滑块相互控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery-ui slider - 如何阻止两个滑块相互控制相关的知识,希望对你有一定的参考价值。

这是参考之前提出的question

这里的问题是,每个slider控制另一个。它会产生反馈。

我怎么可能阻止它?

$(function() {
    $("#slider").slider({ slide: moveSlider2 });
    $("#slider1").slider({ slide: moveSlider1 });
    function moveSlider2( e, ui ) 
    {
        $('#slider1').slider( 'moveTo', Math.round(ui.value) );
    }

    function moveSlider1( e, ui ) 
    {
        $('#slider').slider( 'moveTo', Math.round(ui.value) );
    }
});
答案

这有点像黑客,但有效:

$(function () {
    var slider = $("#slider");
    var slider1 = $("#slider1");
    var sliderHandle = $("#slider").find('.ui-slider-handle');
    var slider1Handle = $("#slider1").find('.ui-slider-handle');

    slider.slider({ slide: moveSlider1 });
    slider1.slider({ slide: moveSlider });

    function moveSlider( e, ui ) {
        sliderHandle.css('left', slider1Handle.css('left'));
    }

    function moveSlider1( e, ui ) {
        slider1Handle.css('left', sliderHandle.css('left'));
    }
});

基本上,您可以通过直接操作css来避免反馈,而不是触发幻灯片事件。

另一答案

你可以存储一个var CurrentSlider ='slider';

在任一滑块上的mousedown上,将CurrentSlider值设置为该滑块,

并在你的moveSlider(...)方法中检查这是否是CurrentSlider,如果没有,你不传播滑动(避免反馈)

另一答案

你可以给你的moveSlider1moveSlider2函数提供一个可选参数,当设置为true值时,它会抑制递归。

另一答案

一种更简单的方法,它是上述答案的混合体:

    var s1 = true;
    var s2 = true;
    $('#slider').slider({
        handle: '.slider_handle',
        min: -100,
        max: 100,
        start: function(e, ui) {
        },
        stop: function(e, ui) { 
        },
        slide: function(e, ui) {
            if(s1)
            {
                s2 = false;
                $('#slider1').slider("moveTo", ui.value);
                s2 = true;
            }
        }
    });


    $("#slider1").slider({ 
        min: -100, 
        max: 100,
        start: function(e, ui) {
        },
        stop: function(e, ui) { 
        },
        slide: function(e, ui) {
            if(s2)
            {
                s1 = false;
                $('#slider').slider("moveTo", ui.value);
                s1 = true;
            }
        }
        });

});
另一答案

现在尝试这个,并且所有答案都可能由于jquery ui的更改而无效。

如果你更换Badri的解决方案

$('#slider').slider("moveTo", ui.value);

$('#slider').slider("option", "value", ui.value);

以上是关于jQuery-ui slider - 如何阻止两个滑块相互控制的主要内容,如果未能解决你的问题,请参考以下文章

h5 slider页面滑动相关问题

如何将 jquery-ui 与 nodejs 一起使用?

如何使用两个 Ui Range Sliders 对相同的数据进行排序

如何阻止jquery UI滑块滑动到排水沟之外?

Jquery-ui Tabs Open dialog on tab click (stop code)

slider制作经验条/血条/遮罩