jQuery-ui slider - Как остановить два ползунка от управления друг другом - PullRequest
3 голосов
/ 16 ноября 2008

Это относится к вопросу , ранее заданному

Проблема здесь в том, что каждый 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) );
    }
});

Ответы [ 5 ]

2 голосов
/ 16 ноября 2008

Это что-то вроде хака, но работает:

$(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, не вызывая событие слайда.

1 голос
/ 16 ноября 2008

Вы можете хранить переменную CurrentSlider = 'slider';

при mousedown на любом из ползунков, вы устанавливаете значение CurrentSlider для этого ползунка,

и в вашем методе moveSlider (...) вы проверяете, является ли это CurrentSlider, если нет, вы не распространяете скольжение (избегая обратной связи)

0 голосов
/ 12 декабря 2011

Попробовал это сейчас, и все ответы не работают, возможно, из-за изменений в jquery ui.

Решение Бадри работает, если вы замените

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

с

$('#slider').slider("option", "value", ui.value);
0 голосов
/ 22 ноября 2008

Более простой подход, который является своего рода гибридом вышеупомянутых ответов:

    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;
            }
        }
        });

});
0 голосов
/ 16 ноября 2008

Вы можете просто указать необязательный параметр для функций moveSlider1 и moveSlider2, который при установке на истинное значение подавляет рекурсию.

...