jQuery UI Slider:沿着(连同)句柄移动值

Posted

技术标签:

【中文标题】jQuery UI Slider:沿着(连同)句柄移动值【英文标题】:jQuery UI Slider: move the value along (with) the handle 【发布时间】:2011-11-16 23:23:39 【问题描述】:

我在我的页面中使用了 jQuery UI 滑块组件来设置价格的范围。 我还可以使用他们的 ui.values[] 来设置和显示其他 div 中的新值。

我怎样才能看到句柄下的新值。 IE。如果我移动了 句柄为 100 美元,我想在该句柄正下方设置“100 美元”文本。

顺便说一句,我使用范围版本 - 设置价格范围,所以我的滑块上有两个手柄(最小值和最大值)。

var minPriceRange=100;
var maxPriceRange=500;
$( "#priceRangeSlider" ).slider(
        range: true,
        min: minPriceRange,
        max: maxPriceRange,
        step: 10,
        values: [ minPriceRange, maxPriceRange ],
        slide: function( event, ui ) 
            ("#fromRangeText").text("$" + ui.values[ 0 ]);
            $("#toRangeText").text("$" + ui.values[ 1 ]);
        
);

【问题讨论】:

【参考方案1】:

您可以使用 jQuery UI 中的 .position 实用函数来定位标签:

$("#slider").slider(
    ...
    slide: function(event, ui) 
        var delay = function() 
            var handleIndex = $(ui.handle).data('index.uiSliderHandle');
            var label = handleIndex == 0 ? '#min' : '#max';
            $(label).html('$' + ui.value).position(
                my: 'center top',
                at: 'center bottom',
                of: ui.handle,
                offset: "0, 10"
            );
        ;

        // wait for the ui.handle to set its position
        setTimeout(delay, 5);
    
);

查看操作:http://jsfiddle.net/william/RSkpH/1/。

【讨论】:

这与我的问题相同,如果滑块是在屏幕外创建的,则标签位于手柄上方,而不是下方。添加margin-top:1000px;到您的滑块 CSS 中,您将看到问题。【参考方案2】:

change => 此事件在幻灯片停止时触发,或者如果值以编程方式更改(通过 value 方法)。接受参数事件和用户界面。使用 event.originalEvent 来检测值是否被鼠标、键盘或以编程方式更改。使用ui.value(单柄滑块)获取当前句柄的值,$(this).slider('values', index)获取另一个句柄的值。

http://docs.jquery.com/UI/Slider#event-change

【讨论】:

这不是对原始问题的直接回答,但事实证明这正是我所需要的。谢谢!【参考方案3】:

我只是将标签放在手柄内,而不是一直重新定位它们,就像在这个答案中一样:https://***.com/a/7431057/1250436

$("#slider").slider(
    range: true,
    min: 100,
    max: 500,
    step: 10,
    values: [100, 500],
    animate: 'slow',
    create: function() 
        $('#min').appendTo($('#slider a').get(0));
        $('#max').appendTo($('#slider a').get(1));
    ,
    slide: function(event, ui)  $(ui.handle).find('span').html('$' + ui.value); 
);

更新

这在 Chromium for Linux 中不起作用。发生了一个奇怪的 gfx 错误。

查看工作演示:http://jsfiddle.net/ohcibi/RvSgj/2/

【讨论】:

【参考方案4】:

我追求同样的目标,我决定使用 Bootstrap 的工具提示。你可以试试this JSFiddle上的代码。

$('#slider').slider(
    range: true,
    min: -60,
    max: 60,
    values: [ init_start_at, init_end_at ],
    slide: function(event, ui) 
        // Allow time for exact positioning
        setTimeout( function()
            $(ui.handle).attr('title', ui.value + '°C').tooltip('fixTitle').tooltip('show');
        , 5);
    ,
    create: function( event, ui ) 
        var target = $(event.target);
        var handles = $(event.target).find('a');
        var container, wait;

        // Wait for the slider to be in position
        (wait = function() 
            if ((container = target.parents('.content')).length != 0) 
                handles.eq(0).tooltip(animation: false, placement: 'top',trigger: 'manual', container: container, title: init_start_at + ' °C').tooltip('show');
                handles.eq(1).tooltip(animation: false, placement: 'bottom',trigger: 'manual', container: container, title: init_end_at + ' °C').tooltip('show');
             else 
                setTimeout( wait, 50 );
            
        )();
    
);

希望它对某人有所帮助。

【讨论】:

【参考方案5】:

可以通过包含引导工具提示来创建一个漂亮的滑块。这是使用引导工具提示的滑块的更新版本。 http://jsfiddle.net/ykay/jL044k1c/

function slide(event, ui) 
    setTimeout(function () 
        $(ui.handle).attr('title', ui.value).tooltip('fixTitle').tooltip('show');
    , 0);

function create(event, ui, start, end) 
    var handles = $(event.target).find('span');
    handles.eq(0).tooltip(animation: false, placement: 'top', trigger: 'manual', container: handles.eq(0), title: start).tooltip('show');
    handles.eq(1).tooltip(animation: false, placement: 'top', trigger: 'manual', container: handles.eq(1), title: end).tooltip('show');

$('#slider').slider(
    range: true,
    min: 0,
    max: 100,
    values: [20, 80],
    slide: function (event, ui) 
        slide(event, ui)
    ,
    create: function (event, ui) 
        create(event, ui, $(this).slider('values', 0), $(this).slider('values', 1))
    
);

【讨论】:

【参考方案6】:

你可以在jQyeryUI滑块页面的官方文档中很容易找到它,如下例所示

http://jqueryui.com/slider/#custom-handle

【讨论】:

以上是关于jQuery UI Slider:沿着(连同)句柄移动值的主要内容,如果未能解决你的问题,请参考以下文章

处理之前的 jQuery UI Slider 样式

可在 Slick-slider 中拖动的 jQuery UI

如何更改 Jquery UI 滑块句柄

带有 2 个手柄的 jQuery UI 滑块 - 防止交叉

jquery垂直滑块句柄不移动

jQuery UI Slider 重置动画