Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery UI范围滑块-在滑块中间点击右拖拽器(手柄)_Jquery_Jquery Ui_Jquery Ui Draggable - Fatal编程技术网

jQuery UI范围滑块-在滑块中间点击右拖拽器(手柄)

jQuery UI范围滑块-在滑块中间点击右拖拽器(手柄),jquery,jquery-ui,jquery-ui-draggable,Jquery,Jquery Ui,Jquery Ui Draggable,我以以下方式使用jQueryUI范围滑块: $(function() { $( "#slider-range" ).slider({ range: true, min: 0, max: 4, step: 1, values: [ 0, 4 ], slide: function( event, ui ) { $( "#amount" ).val( "$" + ui.val

我以以下方式使用jQueryUI范围滑块:

$(function() {
    $( "#slider-range" ).slider({
        range: true,
        min: 0,
        max: 4,
        step: 1,
        values: [ 0, 4 ],
        slide: function( event, ui ) {
            $( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
        }
    });
    $( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
        " - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
我需要做的是当你在滑块中间点击右边的拖拉(手柄)到点击的位置。当前,当你在中间点击时,左边的拖拽(手柄)被拖到那个位置。我有没有办法改变这种行为


谢谢你的帮助

这实际上不是它的工作原理,尽管它可能看起来是这样的。它实际上检测哪个句柄最近,并选择那个句柄。每次单击时,都会计算与两个控制柄的距离(以像素为单位)。更容易看到范围更广的功能,请看我制作的小提琴:

以下是jQueryUI使用的函数:

this.handles.each(function( i ) {
var thisDistance = Math.abs( normValue - self.values(i) );
if ( distance > thisDistance ) {
distance = thisDistance;
closestHandle = $( this );
index = i;
}
});
资料来源:


总的来说,我认为这是有用的。正确重写它可能有点困难,因为它在另一个包含大量逻辑的方法中的匿名函数中。你可以,我真的不推荐,但是你可以修改源代码,把最近的句柄设置为第二个。但说真的,不要那样做。这是一个非常糟糕的习惯。

我知道这是一个老问题,但我遇到了同样的问题,并找到了一个更简单的方法来处理它。基本上,您需要禁用滑块本身上的指针事件,在句柄上启用它们,然后将“单击”事件附加到手动移动滑块的容器div。以下是步骤:

假设这个html:

<div class="container-outer">
   <div class="container-inner">
     <div class="jquerySlider">
     </div>
   </div>
</div>
您的javascript如下所示:

.container-inner {
pointer-events: none;
}

.container-inner .ui-slider .ui-slider-handle {
    pointer-events: auto;
}
'click .container-outer': function(event) {
   event.preventDefault();
   var clickPosition = event.offsetX;
   var clickPercentage = event.offsetX / event.currentTarget.offsetWidth;
   var sliderMax = $('.jquerySlider').slider("option","max");
   var newPosition = sliderMax * clickPercentage;
   $('.jquerySlider').("values",1,newPosition);
}
好处是可以避免弄乱jquery代码。此外,句柄上的事件本身仍能正常工作

缺点是您必须自己手动处理滑块单击。但如上所示,这并不难做到


无论如何,希望这对遇到此问题的其他人有用。

你好,乔纳森。滑块似乎不会移动最近的拖动器。您可以在这个jsFiddle中看到这一点:如果您试图将右侧的dragger/句柄移动到第二个点,您将无法做到这一点。右侧牵引器将到达第三点并在那里停止。然后,如果您甚至单击非常靠近右拖动器/手柄的位置,左拖动器将移动。你能给我一个如何解决这个问题的提示吗?@cycero问题是你只有4个可能的值。没有什么需要修复的,它工作正常,即使有4个值,它仍然可以正常工作。谢谢。但我需要通过单击滑块使右拖动器/手柄到达第二个点。现在,当右拖动器到达第三点时,它会在那里停顿,如果您甚至在右拖动器非常近的位置单击,左拖动器将移动到第二点。根据逻辑-最近的拖动器应该在单击时移动。因为您只有4个点,在第二次单击时,它们都是并列的“最近的”。我认为逻辑在只有4个点的情况下运行得不是很好,因为它们是标准化的。但这不是一件容易改变的事情。你必须重写我在上面发布的那篇文章,正如我所说的,这是一个匿名函数,在一个非常大的逻辑片段中。