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,如果没有,你不传播滑动(避免反馈)
另一答案
你可以给你的moveSlider1
和moveSlider2
函数提供一个可选参数,当设置为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 - 如何阻止两个滑块相互控制的主要内容,如果未能解决你的问题,请参考以下文章
如何使用两个 Ui Range Sliders 对相同的数据进行排序