2011-12-27 48 views
8

¿Cómo agrego las marcas al control deslizante jQuery? Digamos que tengo valores del 1 al 10, ¿cómo puedo agregar un tic en cada valor?¿Añadir marcas al control deslizante jQuery?

He visto publicaciones similares en S.O. pero todos sugieren complementos, y me gustaría codificarlo debido a mucha interactividad con otros elementos.

Gracias!

Respuesta

3

Similar to this SO Question. La respuesta de Mortimer podría ayudar.

Aunque todavía no hay una forma oficial de hacerlo, sería bueno tenerlo cocido en el control deslizante de la jQuery UI.

+2

@DonnyP: Mando llamó específicamente su atención a Mortimer's Answer, no a Bijan's – silvamerica

+0

Ah, gracias chicos :) –

0

Puede utilizar una imagen de fondo que tenga las marcas en los lugares correctos; esta sería probablemente la forma más sencilla.

+0

El rango del control deslizante es dinámico, por lo que usar una imagen de fondo no funcionará. Gracias sin embargo. Sospecho que hay soluciones de CSS –

3

aquí es una solución sencilla si se asume que el intervalo deslizante = 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; 
} 
10

Gracias Código-sapo. He modificado el código para trabajar con porcentajes en lugar de píxeles, por lo que ahora es inmune a la ventana de cambio de tamaño:

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; 
} 
+0

.ui-slider-tick-mark { display: inline-block; ancho: 2px; fondo: # fcf8e3; altura: 28px; posición: absoluta; arriba: 0px; } Si desea que los estilos aparezcan en la parte inferior. Este es un mod de tu código. Gracias. – blackmambo

9

Gracias Arie Livshin y CodeToad. El código anterior asume que el valor mínimo es siempre 1. Edité el código para trabajar con valores mínimos también.

$("#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); 
    } 
} 
+0

es posible que desee cambiar el ciclo para comenzar desde i = 1. esto me hace ver mejor en mi opinión – harshit

Cuestiones relacionadas