J'ai regardé le plugin jquery et je me demandais comment adapter ce plugin pour transformer un nombre (comme 4.8618164) en 4,8618164 étoiles remplies sur 5. En gros, interpréter un nombre <5 en étoiles remplies dans un système d'évaluation 5 étoiles en utilisant jQuery / JS / CSS.
Notez que cela n'affichera / affichera que les étoiles d'un nombre déjà disponible et n'acceptera pas de nouvelles soumissions de notes.
javascript
jquery
css
rating
Steve
la source
la source
Réponses:
Voici une solution pour vous, en utilisant une seule image très petite et simple et un élément span généré automatiquement:
CSS
Image
Note: ne pas hotlink à l'image ci - dessus! Copiez le fichier sur votre propre serveur et utilisez-le à partir de là.
jQuery
Si vous souhaitez limiter les étoiles à une demi-étoile ou un quart d'étoile uniquement, ajoutez l'une de ces lignes avant la
var size
ligne:HTML
Usage
Production
Démo
Cela répondra probablement à vos besoins. Avec cette méthode, vous n'avez pas besoin de calculer des largeurs d'étoiles de trois quarts ou autres, donnez-lui simplement un flotteur et il vous donnera vos étoiles.
Une petite explication sur la façon dont les étoiles sont présentées pourrait être de mise.
Le script crée deux éléments d'étendue de niveau bloc. Les deux travées ont initialement une taille de 80px * 16px et une image d'arrière-plan stars.png. Les travées sont imbriquées, de sorte que la structure des travées ressemble à ceci:
La travée extérieure obtient un
background-position
de0 -16px
. Cela rend visibles les étoiles grises de la travée extérieure. Comme la travée extérieure a une hauteur de 16px etrepeat-x
, elle n'affichera que 5 étoiles grises.La durée intérieure d'autre part a
background-position
de0 0
qui fait que les étoiles jaunes visibles.Cela fonctionnerait bien sûr avec deux fichiers image séparés, star_yellow.png et star_gray.png. Mais comme les étoiles ont une hauteur fixe, nous pouvons facilement les combiner en une seule image. Cela utilise la technique du sprite CSS .
Désormais, au fur et à mesure que les travées sont imbriquées, elles sont automatiquement superposées les unes sur les autres. Dans le cas par défaut, lorsque la largeur des deux travées est de 80 pixels, les étoiles jaunes masquent complètement les étoiles grises.
Mais lorsque nous ajustons la largeur de la travée intérieure, la largeur des étoiles jaunes diminue, révélant les étoiles grises.
En ce qui concerne l'accessibilité, il aurait été plus sage de laisser le nombre flottant à l'intérieur de la plage intérieure et de le masquer avec
text-indent: -9999px
, de sorte que les personnes avec CSS désactivé voient au moins le nombre à virgule flottante au lieu des étoiles.J'espère que cela a du sens.
Mis à jour le 22/10/2010
Maintenant encore plus compact et plus difficile à comprendre! Peut également être réduit à une seule doublure:
la source
max-width
).Si vous ne devez prendre en charge que les navigateurs modernes, vous pouvez vous en sortir avec:
Il vous suffit de convertir le nombre en a
class
, par exempleclass='stars-score-50'
.Tout d'abord une démonstration du balisage "rendu":
Puis une démo qui utilise un petit bout de code:
Les plus gros inconvénients de cette solution sont:
width
sur un pseudo-élément).Pour résoudre ce problème, la solution ci-dessus peut être facilement modifiée. Les bits
:before
et:after
doivent devenir de véritables éléments dans le DOM (nous avons donc besoin de JS pour cela).Ce dernier est laissé comme un exercice pour le lecteur.
la source
Essayez cette fonction / fichier d'aide jquery
jquery.Rating.js
index.html
la source
Pourquoi ne pas avoir simplement cinq images distinctes d'une étoile (vide, quart plein, moitié plein, trois quart plein et plein), puis injecter simplement les images dans votre DOM en fonction de la valeur tronquée ou arrondie de la note multipliée par 4 ( pour obtenir un nombre entier pour les trimestres)?
Par exemple, 4,8618164 multiplié par 4 et arrondi est de 19, ce qui correspond à quatre étoiles et trois quarts.
Sinon (si vous êtes paresseux comme moi), choisissez simplement une image parmi 21 (de 0 étoiles à 5 étoiles par incréments d'un quart) et sélectionnez l'image unique en fonction de la valeur susmentionnée. Ensuite, c'est juste un calcul suivi d'un changement d'image dans le DOM (plutôt que d'essayer de changer cinq images différentes).
la source
J'ai fini par devenir totalement sans JS pour éviter le décalage de rendu côté client. Pour ce faire, je génère du HTML comme ceci:
Pour faciliter l'accessibilité, j'ajoute même la valeur de notation brute dans l'attribut title.
la source
en utilisant jquery sans prototype, mettez à jour le code js pour
J'ai également ajouté un attribut de données par le nom de l'évaluation des données dans la plage.
la source
DEMO
Vous pouvez le faire avec 2 images seulement. 1 étoiles vierges, 1 étoiles remplies.
Superposer l'image remplie par-dessus l'autre. et convertissez le numéro de classement en pourcentage et utilisez-le comme largeur de l'image de remplissage.
la source
Voici mon avis sur l'utilisation de JSX et de la police géniale, limitée à une précision de 0,5 seulement:
La première rangée correspond à l'étoile entière et la deuxième rangée à la demi-étoile (le cas échéant)
la source