【问题标题】:Tick label position of seiyria/bootstrap-slider are not correctseiyria/bootstrap-slider 的刻度标签位置不正确
【发布时间】:2015-12-02 12:45:25
【问题描述】:

我正在使用 seiyria 引导滑块,其中刻度标签是动态的。在这里您可以看到刻度正确对齐,但它们的标签没有。

以下是示例标记

<div class="container">
<div class="examples">
    <div class='slider-example'>
         <h3>Example 13:</h3>

        <p>Using ticks.</p>
        <div class="well">
           <input id="ex13" type="text" data-slider-ticks="[100, 150, 180, 300, 400]"  data-slider-ticks-labels='["$100", "$150", "$180", "$300", "$400"]' />
        </div>
    </div>
</div>

Here is a jsFiddle 显示问题

这是显示问题的图像:

【问题讨论】:

  • 我已经回复to your issue - 你还需要什么?
  • 在下面查看我的答案的更新,这应该会让你排序:)

标签: javascript jquery slider


【解决方案1】:

这是官方状态下bootstrap-slider插件的一个限制(作者在下面的cmets中确认)。

但是,通过对插件进行一些调整,你可以让它做你想做的事情。

jsFiddle Example

具体来说,这是我为了达到这个效果而改的:

我更改了此 CSS 规则(您应该真正覆盖特定容器的原始规则,而不是像我为简单起见那样更改插件 CSS):

.slider.slider-horizontal {
  width: 100%; /*changed*/
  height: 20px;
}

我在插件中添加了这个默认选项:

    Slider.prototype = {
        //....
        defaultOptions: {
            //...
            modify_label_layout:false // added this option
        },
        //....

然后,我在插件中添加了这两个功能:

         _modifyLabelOffset: function(){
            var positions = [];
            var $sliderContainer=$(this.element).prevAll('.slider');
            var $ticks = $sliderContainer.find('.slider-tick');
            var $labels = $sliderContainer.find('.slider-tick-label');
            $sliderContainer.css('margin-bottom', '12px');
            $ticks.each(function () {
                var $this = $(this);
                var tickWidth = $this.width();
                var tickLeft = $this.position().left;
                positions.push(tickLeft - (tickWidth))
            });
            $labels.each(function (i,e) {
                var $this = $(this);
                $this.css('width', 'auto');
                $this.css('position', 'absolute');
                $this.css('left', positions[i]+'px');
            });
            $this=this;
            $( window ).resize(function() {
                $this._delay(function(){
                    $this._modifyLabelOffset();
                }, 500);
            });
        },
        _delay: (function(){
            var timer = 0;
            return function(callback, ms){
                clearTimeout (timer);
                timer = setTimeout(callback, ms);
            };
        })(),

我把插件的初始化改成这样:

$("#ex13").slider({
    ticks: [100, 150, 180, 300, 400],
    ticks_labels: ['$100', '$150', '$180', '$300', '$400'],
    ticks_snap_bounds: 30,
    modify_label_layout:true  // added this option to the plugin, if true the layout of the lables will be modified
}).slider('setValue', 0); // starts out at 5 for some reason, weird, for now , just set it manually to 0

请注意,这有点像 hack,毫无疑问可以以更好的方式合并到插件中。另外,我只在 chrome 中测试过这个。它在其他浏览器中可能无法正常运行,但这显示了概念证明,所以我让你从那里拿它:)


原答案:

我认为这是 bootstrap-slider 插件的限制。

请注意,如果您像这样使用均匀间隔的数字:

data-slider-ticks="[100, 200, 300, 400, 500]"

标签位置正确。 see this jsFiddle

该插件可以让您使用相对靠近的小数字,就像您在此处所做的那样,但即使their own example page 这样做时也会显示布局问题:

【讨论】:

  • 这是一个限制。你不能让事物 100% 动态并且看起来 100% 很好,所以在使用它时你需要谨慎行事。 OP 已经在我们的问题跟踪器中发布并得到了回复。
  • @Seiyria 感谢您的确认。对于它的价值,我能够调整插件以获得所需的效果。不过,诚然,我还没有完全测试我的更改 :)
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多