He estado mirando el complemento jquery y me preguntaba cómo adaptar ese complemento para convertir un número (como 4.8618164) en un 4.8618164 estrellas llenas de 5. Básicamente interpretar un número <5 en estrellas llenado en un sistema de calificación de 5 estrellas usando jQuery / JS / CSS.
Tenga en cuenta que esto solo mostrará / mostraría la calificación de estrellas de un número ya disponible y no aceptará nuevas presentaciones de calificaciones.
javascript
jquery
css
rating
Steve
fuente
fuente
Respuestas:
Aquí hay una solución para usted, usando solo una imagen muy pequeña y simple y un elemento span generado automáticamente:
CSS
Imagen
Nota: ¡ NO enlace a la imagen de arriba! Copie el archivo en su propio servidor y utilícelo desde allí.
jQuery
Si desea restringir las estrellas a solo la mitad o un cuarto de estrella, agregue una de estas filas antes de la
var size
fila:HTML
Uso
Salida
Manifestación
Probablemente esto se adapte a sus necesidades. Con este método no tienes que calcular ningún ancho de estrella de tres cuartos o lo que sea, solo dale un flotador y te dará tus estrellas.
Una pequeña explicación sobre cómo se presentan las estrellas podría estar en orden.
El script crea dos elementos de tramo a nivel de bloque. Ambos tramos obtienen inicialmente un tamaño de 80px * 16px y una imagen de fondo stars.png. Los tramos están anidados, de modo que la estructura de los tramos se ve así:
El tramo exterior obtiene una
background-position
de0 -16px
. Eso hace visibles las estrellas grises en el tramo exterior. Como el tramo exterior tiene una altura de 16px yrepeat-x
, solo mostrará 5 estrellas grises.El tramo interior por otro lado tiene una
background-position
de0 0
cuales solo hace visibles las estrellas amarillas.Por supuesto, esto funcionaría con dos archivos de imágenes separados, star_yellow.png y star_gray.png. Pero como las estrellas tienen una altura fija, podemos combinarlas fácilmente en una imagen. Esto utiliza la técnica de sprites CSS .
Ahora, a medida que se anidan los tramos, se superponen automáticamente entre sí. En el caso predeterminado, cuando el ancho de ambos tramos es 80px, las estrellas amarillas oscurecen por completo las estrellas grises.
Pero cuando ajustamos el ancho del tramo interior, el ancho de las estrellas amarillas disminuye, revelando las estrellas grises.
En cuanto a la accesibilidad, hubiera sido más prudente dejar el número flotante dentro del intervalo interno y ocultarlo
text-indent: -9999px
, para que las personas con CSS desactivado al menos vieran el número de punto flotante en lugar de las estrellas.Ojalá tuviera algún sentido.
Actualizado 2010/10/22
¡Ahora aún más compacto y más difícil de entender! También se puede exprimir hasta formar un solo revestimiento:
fuente
max-width
).Si solo tiene que admitir navegadores modernos, puede salirse con la suya:
Solo necesita convertir el número a
class
, por ejemploclass='stars-score-50'
.Primero una demostración de marcado "renderizado":
Luego, una demostración que usa un poquito de código:
Las mayores desventajas de esta solución son:
width
en un pseudoelemento).Para solucionar este problema, la solución anterior se puede modificar fácilmente. El
:before
y:after
bits deben convertirse en elementos reales en el DOM (por lo que necesitamos algo de JS para eso).Este último se deja como ejercicio para el lector.
fuente
Pruebe esta función / archivo de ayuda de jquery
jquery.Rating.js
index.html
fuente
¿Por qué no tener cinco imágenes separadas de una estrella (vacía, un cuarto lleno, medio lleno, tres cuartos lleno y lleno) y luego simplemente inyectar las imágenes en su DOM dependiendo del valor de calificación truncado o enrutado multiplicado por 4 ( para obtener un número entero para los trimestres)?
Por ejemplo, 4.8618164 multiplicado por 4 y redondeado es 19, que serían cuatro y tres cuartos de estrella.
Alternativamente (si eres perezoso como yo), solo selecciona una imagen de 21 (de 0 estrellas a 5 estrellas en incrementos de un cuarto) y selecciona la imagen única según el valor mencionado anteriormente. Entonces es solo un cálculo seguido de un cambio de imagen en el DOM (en lugar de intentar cambiar cinco imágenes diferentes).
fuente
Terminé yendo totalmente libre de JS para evitar el retraso de procesamiento del lado del cliente. Para lograr eso, genero HTML como este:
Para ayudar con la accesibilidad, incluso agrego el valor de calificación sin procesar en el atributo de título.
fuente
usando jquery sin prototipo, actualice el código js a
También agregué un atributo de datos por el nombre de clasificación de datos en el intervalo.
fuente
MANIFESTACIÓN
Puedes hacerlo con solo 2 imágenes. 1 estrellas en blanco, 1 estrellas llenas.
Superponga la imagen llena en la parte superior de la otra. y convierta el número de clasificación en porcentaje y utilícelo como ancho de la imagen de relleno.
fuente
Sin embargo, aquí está mi opinión sobre el uso de JSX y una fuente increíble, limitada en solo 0.5 precisión:
La primera fila es para toda la estrella y la segunda fila es para media estrella (si corresponde)
fuente