我正在尝试创建一个应该遵循处理程序的div,如下所示: http://m1.dk/Priser/#tab:#calc,#abb
我的JSfiddle:http://jsfiddle.net/z3xV3/2/
我还想对应该出现在框中的UI值进行计算。
以下是我想要实现的内容:
HTML:
<div id="slider"></div>
<input id="sliderValue" />
Jquery的:
$(document).ready(function() {
// Pris slider
$("#slider").slider({value:'',min: 0,max: 150,step: 1, range: 'min',
slide: function( event, ui ) {
$( "#amount" ).html( ui.value + ' timer');
}
});
$( "#amount" ).val( "$" + $( "#slider" ).slider( "value" ) );
});
答案 0 :(得分:16)
我希望你正在寻找的效果是:http://jsfiddle.net/z3xV3/11/
<强> JS 强>
$(document).ready(function() {
$("#slider").slider({value:'', min: 0, max: 150, step: 1, range: 'min'});
var thumb = $($('#slider').children('.ui-slider-handle'));
setLabelPosition();
$('#slider').bind('slide', function () {
$('#sliderValue').val($('#slider').slider('value'));
setLabelPosition();
});
function setLabelPosition() {
var label = $('#sliderValue');
label.css('top', thumb.offset().top + label.outerHeight(true));
label.css('left', thumb.offset().left - (label.width() - thumb.width())/ 2);
}
});
<强> HTML 强>
<div id="slider"></div>
<input id="sliderValue" />
<强> CSS 强>
#sliderValue {
position:absolute;
width: 50px;
}
祝你好运!
答案 1 :(得分:6)
我修改了你的jsfiddle示例:http://jsfiddle.net/Dr5UR/
$("#amount").val("$" + $("#slider").slider({
slide: function(event, ui) {
$('#sliderValue').css('left', event.clientX).val(ui.value);
}
}));
我使用slider的幻灯片事件。
幻灯片事件有两个参数:
<强>事件强>
此对象包含有关事件本身的若干信息。触发时间,按下的键或触发时鼠标的坐标。 clientX 属性包含我们需要设置到移动对象的位置。
<强> UI 强>
ui对象来自jQuery UI本身。它基本上只包含值。此外,它还包含用于拖动的锚点。但是你不能使用它的位置,因为滑动事件在锚点占据新位置之前生效。
#slideValue
输入需要position: absolute;
,因为我使用CSS中的左侧位置属性。您还可以设置margin-left
值,而无需将position
设置为absolute
。
答案 2 :(得分:4)
将它变成一个简单的jQuery插件实际上非常简单(而且非常有用)。像这样:
JSFiddle:http://jsfiddle.net/PPvG/huYRL/
请注意,我已通过在 #sliderValue
中输入值来添加对移动滑块的支持。
[删除了代码示例]
您还可以选择从HTML中删除 #sliderValue
,然后让插件为您创建。在这种情况下,您将重写插件,以便在滑块上调用它,而不是在#sliderValue
上调用。在我看来,这将是一个更简洁的解决方案。
根据您的评论(并重新阅读您的问题),我重写了插件示例。
如果我理解正确,您希望根据滑块的值进行一些计算,并在滑块手柄下方的标签中显示这些计算的结果。以下内容应该非常简单。
JSFiddle:http://jsfiddle.net/PPvG/q5qg7/
<强> HTML 强>
<div id="slider"></div>
<强>插件强>
(function($) {
$.fn.sliderLabel = function(options) {
var settings = $.extend({
marginTop: 2,
// Margin between the slider handle and the label (in pixels)
callback: function(value) {
return 'Value: ' + value;
}
}, options);
return this.each(function() { // <- maintains chainability
var slider = $(this);
var handle = slider.children('.ui-slider-handle');
var data = slider.data('sliderLabel');
if (handle.length === 0) {
// $(this) isn't a slider (it has no handle)
console.log('[SliderLabel] Error: sliderLabel() can only be called on a slider.');
return;
}
if (data === undefined) {
// First time sliderLabel() is called on this slider
data = {
label: $('<div class="ui-slider-label" />').css('position', 'absolute'),
callback: settings.callback
};
data.label.insertAfter(slider);
function updateLabel() {
var value = slider.slider('value');
var labelText = data.callback(value);
data.label.html(labelText);
data.label.css('top', handle.offset().top + handle.outerHeight() + settings.marginTop);
data.label.css('left', handle.offset().left - ((data.label.width() - handle.width()) / 2));
}
updateLabel();
slider.bind('slide', updateLabel);
} else {
// sliderLabel() was called before; just update the callback:
data.callback = settings.callback;
updateLabel();
}
// Save (or update) the data inside the slider:
slider.data('sliderLabel', data);
});
}
})(jQuery);
<强>用法强>
$("#slider").slider();
$("#slider").sliderLabel({
callback: function(value) {
return value + '%';
}
});
如您所见,现在可以在滑块上调用插件。您现在可以为插件提供回调,允许您进行一些计算并返回格式正确的标签(允许使用HTML)。
在上面的示例中,回调只是将传递给回调的value
附加到'%'
。
答案 3 :(得分:2)
以下是带有两个手柄
的滑块的工作示例
$('#slider').slider({
range: true,
min: 500,
max: 10000,
step: 100,
values: [1000, 2000],
slide: function( event, ui ) {
$('#min-price').html('$' + ui.values[0]);
$('#min_budget').val(ui.values[0]);
$('#max-price').html('$' + ui.values[1]);
$('#max_budget').val(ui.values[1]);
}
//move labels when handles are moved
moveValueLabels();
}
});
//move the value labels directly under the handles
function moveValueLabels() {
var pos_first_handle = $('.ui-slider-handle:first').position();
var pos_last_handle = $('.ui-slider-handle:last').position();
$('#min-price').css('left', (pos_first_handle.left - ($('#min-price').width()/2)));
$('#max-price').css('left', (pos_last_handle.left - ($('#max-price').width()/2)));
}
//set initial positioning of labels when page is loaded
moveValueLabels();
CSS:
#slider {
overflow: visible;
#min-price {
position:absolute;
top:20px;
font-weight: bold;
padding:0;
}
#max-price {
position:absolute;
top:20px;
font-weight: bold;
padding:0;
}
}
答案 4 :(得分:1)
HTML:
<div id="slider"></div>
CSS:
#slider {
width: 200px;
}
#sliderValue {
position: absolute;
left: 0;
bottom: -30px;
width: 40px;
}
jQuery的:
$("#slider").slider({
value: '',
min: 0,
max: 100,
range: 'min',
create: function (event, ui) {
$('.ui-slider-handle').append('<input id="sliderValue" />');
},
slide: function (event, ui) {
$("#sliderValue").val(ui.value);
}
});
答案 5 :(得分:0)
用jQuery插件查看替代解决方案会很好,例如:
答案 6 :(得分:0)
带上你的jsfiddle。
HTML:
<div id="slider"></div>
<input id="sliderValue" />
CSS:
#sliderValue{width:50px;}
Jquery的:
$(document).ready(function() {
// Pris slider
$("#slider").slider({value:'',min: 0,max: 150,step: 1, range: 'min',
slide: function( event, ui ) {
$( "#sliderValue" ).val( ui.value + ' timer');
var offset = $(this).find('a').css("left");
$("#sliderValue").css("margin-left", offset);
}
});
$( "#sliderValue" ).val($( "#slider" ).slider( "value" ));
});
答案 7 :(得分:0)
你可以:http://jsfiddle.net/z3xV3/21/
$(document).ready(function() {
$("#slider").slider({
value:0,
min: 0,
max: 150,
step: 1,
range: 'min',
slide: function( event, ui ) {
var offsetLeft = $(this).find(".ui-slider-handle").offset().left;
$( "#sliderValue" )
.val( ui.value + ' timer')
.css({
"position": "absolute",
"left": offsetLeft
});
}
});
});
每次移动手柄时都会调用幻灯片回调:
offsetLeft
是句柄的偏移量。
$( "#sliderValue" )
是您的意见。