3

これは、以前に尋ねられた質問に関連しています

ここでの問題は、それぞれ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) );
    }
});
4

5 に答える 5

2

これは一種のハックですが、機能します:

$(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 を直接操作することでフィードバックを回避します。

于 2008-11-16T11:51:17.813 に答える
1

var CurrentSlider = 'slider'; を保存できます。

いずれかのスライダーでマウスダウンすると、CurrentSlider 値をそのスライダーに設定します。

moveSlider(...) メソッドで、これが CurrentSlider であるかどうかを確認します。そうでない場合は、スライドを伝播しません (フィードバックを回避します)。

于 2008-11-16T10:21:06.323 に答える
0

今これを試してみましたが、jquery uiの変更が原因で、すべての回答が機能しない可能性があります。

バドリの解決策は、あなたが置き換える場合に機能します

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

$('#slider').slider("option", "value", ui.value);
于 2011-12-12T06:34:46.297 に答える
0

moveSlider1関数と関数にオプションのパラメーターを与えるだけmoveSlider2で、真の値に設定すると再帰が抑制されます。

于 2008-11-16T12:16:12.707 に答える
0

上記の回答のハイブリッドのような単純なアプローチ:

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

});
于 2008-11-22T06:06:18.397 に答える