Ich habe mir das jquery-Plugin angesehen und mich gefragt, wie ich dieses Plugin anpassen kann, um aus einer Zahl (wie 4.8618164) eine 4.8618164 von 5 ausgefüllten Sterne zu machen. Grundsätzlich wird eine Zahl <5 in Sterne interpretiert, die in einem 5-Sterne-Bewertungssystem mit jQuery ausgefüllt sind / JS / CSS.
Beachten Sie, dass dies nur die Sternebewertung einer bereits verfügbaren Nummer anzeigt / anzeigt und keine neuen Bewertungsbeiträge akzeptiert.
javascript
jquery
css
rating
Steve
quelle
quelle
Antworten:
Hier ist eine Lösung für Sie, bei der nur ein sehr kleines und einfaches Bild und ein automatisch generiertes Span-Element verwendet werden:
CSS
Bild
Hinweis: Sie NICHT hotlink das obige Bild! Kopieren Sie die Datei auf Ihren eigenen Server und verwenden Sie sie von dort aus.
jQuery
Wenn Sie die Sterne auf nur halbe oder viertel Sterngrößen beschränken möchten, fügen Sie vor der
var size
Zeile eine dieser Zeilen hinzu :HTML
Verwendung
Ausgabe
Demo
Dies wird wahrscheinlich Ihren Bedürfnissen entsprechen. Mit dieser Methode müssen Sie keine Dreiviertel- oder andere Sternbreiten berechnen. Geben Sie einfach einen Float und Sie erhalten Ihre Sterne.
Eine kleine Erklärung, wie die Sterne dargestellt werden, könnte angebracht sein.
Das Skript erstellt zwei Span-Elemente auf Blockebene. Beide Bereiche erhalten zunächst eine Größe von 80px * 16px und ein Hintergrundbild stars.png. Die Bereiche sind verschachtelt, sodass die Struktur der Bereiche folgendermaßen aussieht:
Die äußere Spannweite erhält eine
background-position
von0 -16px
. Das macht die grauen Sterne in der äußeren Spanne sichtbar. Da die äußere Spannweite eine Höhe von 16 Pixel hat undrepeat-x
nur 5 graue Sterne angezeigt werden.Die innere Spannweite hat dagegen eine,
background-position
von0 0
der nur die gelben Sterne sichtbar sind.Dies würde natürlich mit zwei separaten Bilddateien funktionieren, star_yellow.png und star_gray.png. Da die Sterne jedoch eine feste Höhe haben, können wir sie leicht zu einem Bild kombinieren. Dies nutzt die CSS-Sprite-Technik .
Wenn die Bereiche verschachtelt sind, werden sie automatisch übereinander gelegt. Im Standardfall, wenn die Breite beider Bereiche 80 Pixel beträgt, verdecken die gelben Sterne die grauen Sterne vollständig.
Wenn wir jedoch die Breite der inneren Spanne anpassen, nimmt die Breite der gelben Sterne ab und zeigt die grauen Sterne.
In Bezug auf die Barrierefreiheit wäre es klüger gewesen,
text-indent: -9999px
die Gleitkommazahl innerhalb der inneren Spanne zu belassen und mit auszublenden , damit Personen mit deaktiviertem CSS zumindest die Gleitkommazahl anstelle der Sterne sehen.Hoffentlich machte das Sinn.
Aktualisiert am 22.10.2010
Jetzt noch kompakter und schwerer zu verstehen! Kann auch zu einem Einzeiler zusammengedrückt werden:
quelle
max-width
).Wenn Sie nur moderne Browser unterstützen müssen, können Sie Folgendes tun:
Sie müssen nur die Zahl in a umwandeln
class
, zclass='stars-score-50'
.Zuerst eine Demo von "gerendertem" Markup:
Dann eine Demo, die ein bisschen Code verwendet:
Die größten Nachteile dieser Lösung sind:
width
für ein Pseudoelement festzulegen).Um dies zu beheben, kann die obige Lösung leicht angepasst werden. Die
:before
und:after
Bits müssen zu tatsächlichen Elementen im DOM werden (daher benötigen wir dafür JS).Letzteres bleibt als Übung für den Leser.
quelle
Probieren Sie diese jquery-Hilfsfunktion / -datei aus
jquery.Rating.js
index.html
quelle
Warum nicht einfach fünf separate Bilder eines Sterns (leer, viertelvoll, halbvoll, dreiviertelvoll und voll) haben und die Bilder dann einfach in Ihr DOM einfügen, abhängig vom abgeschnittenen oder gerundeten Wert der Bewertung multipliziert mit 4 ( eine ganze Zahl für die Quartale bekommen)?
Zum Beispiel ist 4.8618164 multipliziert mit 4 und gerundet 19, was vier und drei Viertelsterne wäre.
Alternativ (wenn Sie faul sind wie ich) können Sie einfach ein Bild aus 21 auswählen (0 Sterne bis 5 Sterne in Schritten von einem Viertel) und das einzelne Bild basierend auf dem oben genannten Wert auswählen. Dann ist es nur eine Berechnung, gefolgt von einer Bildänderung im DOM (anstatt zu versuchen, fünf verschiedene Bilder zu ändern).
quelle
Am Ende war ich völlig JS-frei, um clientseitige Renderverzögerungen zu vermeiden. Um dies zu erreichen, generiere ich HTML wie folgt:
Um die Barrierefreiheit zu verbessern, füge ich sogar den Rohbewertungswert in das title-Attribut ein.
quelle
Aktualisieren Sie mit jquery ohne Prototyp den js-Code auf
Ich habe auch ein Datenattribut mit dem Namen der Datenbewertung in der Spanne hinzugefügt.
quelle
DEMO
Sie können dies nur mit 2 Bildern tun. 1 leere Sterne, 1 gefüllte Sterne.
Überlagern Sie das gefüllte Bild oben auf dem anderen. und konvertieren Sie die Bewertungszahl in Prozent und verwenden Sie sie als Breite des Füllbildes.
quelle
Hier ist meine Einstellung zur Verwendung von JSX und einer fantastischen Schriftart, die jedoch auf eine Genauigkeit von nur 0,5 beschränkt ist:
Die erste Reihe ist für den ganzen Stern und die zweite Reihe ist für den halben Stern (falls vorhanden)
quelle