【问题标题】:Draggable Range in jQuery SliderjQuery Slider 中的可拖动范围
【发布时间】:2026-01-03 23:40:01
【问题描述】:

对于我提出的问题有很多answers,但我需要什么可以在jquery.ui.slider.js 级别完成而不是写complete new wrapper

但目前来自 davidpadbury 的这段原型代码不适用于最新版本的 jquery.ui.slider!

davidpadbury 的版本到最新的滑块版本有很多变化

【问题讨论】:

    标签: jquery-ui jquery-ui-slider


    【解决方案1】:

    滑块为胜利!没有一路运行,但是一个好的开始。


        <script type='text/javascript' src='../js/jquery.js'></script>
    
        <script type='text/javascript'>
        $(document).ready( function() {
                $(".slider").each( function() {
                        var $knob = $("<div></div>").addClass("slideKnob");
                        $knob.mousedown( function() {
                                this.dragging = true;
                        } );
                        $("<div></div>")
                                .addClass("slideBar")
                                .append($knob)
                                .insertBefore( this );
    
                        $(this).toggle( false );
                        $knob[0].inp = this;
                        $knob[0].dragging = false;
    
                } );
    
                $(document).mouseup( function() {
                        $(".slideKnob").each( function() { this.dragging = false; } );
                } );
    
                $(document).mousemove( function( e ) {
                        $(".slideKnob").each( function() {
                                if( !this.dragging ) return;
                                var lef = e.pageX - $(this).parent().offset().left - 7;
                                var min = $(this.inp).attr("min");
                                var max = $(this.inp).attr("max");
                                var step = $(this.inp).attr("step");
    
                                if( step != 0 ) {
                                        var rstep = 184 * step / (max - min);
                                        lef = rstep * Math.round( lef / rstep );
                                }
                                lef = Math.min( 184, lef );
                                lef = Math.max( 0, lef );
                                $(this).css( "left", lef );
    
                                var val = step * Math.round( (max - min) * lef / (184 * step) );
                                val = Math.round( val * 1000 ) / 1000;
    
                                $(this.inp).attr( "value",  val );
                                console.log( val );
                        } );
                } );
        } );
        </script>
    
        <style type='text/css'>
        .slideBar {
                width: 200px;
                height: 20px;
                border-style: none solid;
                border-width: 1px;
                border-color: #BBB;
                position: relative;
        }
        .slideKnob {
                position: absolute;
                width: 14px;
                height: 14px;
                border: 1px solid #444;
                top: 2px;
                cursor: pointer;
        }
        </style>
    
        <input class='slider' min=0 max=1 step=.1></input>
        <input class='slider' min=100 max=1 step=0></input>
    

    【讨论】:

    • 此代码已在 jquery ui 滑块中可用。但我一直在寻找一个可拖动的范围,jQuery UI 滑块不支持在两个值之间单击和拖动范围元素。
    【解决方案2】:

    jQuery UI Slider 的扩展已经完成;可以从here拉取代码

    【讨论】:

      最近更新 更多