【发布时间】:2012-01-28 18:08:39
【问题描述】:
如何向 jQuery 滑块添加刻度线?假设我的值从 1 到 10,我如何在每个值上添加一个刻度?
我在 S.O. 上看到过类似的帖子。但他们都建议使用插件,由于与其他元素有很多交互性,我想对其进行硬编码。
谢谢!
【问题讨论】:
标签: jquery css jquery-ui slider
如何向 jQuery 滑块添加刻度线?假设我的值从 1 到 10,我如何在每个值上添加一个刻度?
我在 S.O. 上看到过类似的帖子。但他们都建议使用插件,由于与其他元素有很多交互性,我想对其进行硬编码。
谢谢!
【问题讨论】:
标签: jquery css jquery-ui slider
感谢 Code-Toad。我修改了您的代码以使用百分比而不是像素,所以现在它不受窗口调整大小的影响:
Javascript:
function setSliderTicks(){
var $slider = $('#slider');
var max = $slider.slider("option", "max");
var spacing = 100 / (max -1);
$slider.find('.ui-slider-tick-mark').remove();
for (var i = 0; i < max ; i++) {
$('<span class="ui-slider-tick-mark"></span>').css('left', (spacing * i) + '%').appendTo($slider);
}
}
CSS:
.ui-slider-tick-mark{
display:inline-block;
width:2px;
background:black;
height:16px;
position:absolute;
top:-4px;
}
【讨论】:
感谢 Arie Livshin 和 CodeToad。前面的代码假定最小值始终为 1。我编辑了代码以使用最小值。
$("#users-slider").slider(
{
range: "min",
value: 3,
min: 3,
max: 6,
create: function( event, ui ) {
setSliderTicks(event.target);
},
}
);
function setSliderTicks(el) {
var $slider = $(el);
var max = $slider.slider("option", "max");
var min = $slider.slider("option", "min");
var spacing = 100 / (max - min);
$slider.find('.ui-slider-tick-mark').remove();
for (var i = 0; i < max-min ; i++) {
$('<span class="ui-slider-tick-mark"></span>').css('left', (spacing * i) + '%').appendTo($slider);
}
}
【讨论】:
i <= max-min 显示最后一个刻度线。
这是一个假设滑块间隔 = 1 的简单解决方案。
function setSliderTicks(){
var $slider = $('#slider');
var max = $slider.slider("option", "max");
var spacing = $slider.width() / (max -1);
$slider.find('.ui-slider-tick-mark').remove();
for (var i = 0; i < max ; i++) {
$('<span class="ui-slider-tick-mark"></span>').css('left', (spacing * i) + 'px').appendTo($slider);
}
}
.ui-slider-tick-mark{
display:inline-block;
width:2px;
background:black;
height:16px;
position:absolute;
top:-4px;
}
【讨论】:
Similar to this SO Question。 Mortimer 的回答可能会有所帮助。
虽然目前还没有官方的做法,但如果能在 jQuery UI 滑块中烘焙它会很不错。
【讨论】:
您可以使用在正确位置有标记的背景图片 - 这可能是最简单的方法。
【讨论】: