Saya telah melihat plugin jquery dan bertanya-tanya bagaimana cara mengadaptasi plugin itu untuk mengubah angka (seperti 4.8618164) menjadi 4.8618164 bintang diisi dari 5. Pada dasarnya menafsirkan angka <5 menjadi bintang yang diisi dalam sistem peringkat bintang 5 menggunakan jQuery / JS / CSS.
Perhatikan bahwa ini hanya akan menampilkan / menampilkan peringkat bintang dari nomor yang sudah tersedia dan tidak menerima kiriman peringkat baru.
javascript
jquery
css
rating
Steve
sumber
sumber
Jawaban:
Inilah solusi untuk Anda, dengan hanya menggunakan satu gambar yang sangat kecil dan sederhana dan satu elemen span yang dibuat secara otomatis:
CSS
Gambar
Catatan: jangan TIDAK hotlink ke gambar di atas! Salin file ke server Anda sendiri dan gunakan dari sana.
jQuery
Jika Anda ingin membatasi bintang menjadi hanya setengah atau seperempat ukuran bintang, tambahkan salah satu baris berikut sebelum
var size
baris:HTML
Pemakaian
Keluaran
Demo
Ini mungkin sesuai dengan kebutuhan Anda. Dengan metode ini Anda tidak perlu menghitung lebar bintang tiga perempat atau yang lainnya, cukup berikan pelampung dan itu akan memberi Anda bintang Anda.
Penjelasan kecil tentang bagaimana bintang ditampilkan mungkin secara berurutan.
Skrip membuat dua elemen rentang level blok. Kedua bentang awalnya mendapatkan ukuran 80px * 16px dan gambar latar belakang stars.png. Span dibuat bertingkat, sehingga struktur bentang terlihat seperti ini:
Rentang luar mendapat nilai
background-position
sebesar0 -16px
. Itu membuat bintang abu-abu di bentang luar terlihat. Karena rentang luar memiliki tinggi 16 piksel danrepeat-x
, itu hanya akan menampilkan 5 bintang abu-abu.Rentang batin di sisi lain memiliki
background-position
dari0 0
yang membuat hanya bintang kuning terlihat.Ini tentu saja akan bekerja dengan dua imagefile terpisah, star_yellow.png dan star_gray.png. Tetapi karena bintang-bintang memiliki ketinggian yang tetap, kita dapat dengan mudah menggabungkannya menjadi satu gambar. Ini menggunakan teknik sprite CSS .
Sekarang, saat bentang bersarang, bentang secara otomatis terhampar satu sama lain. Dalam kasus default, saat lebar kedua bentang adalah 80 piksel, bintang kuning sepenuhnya mengaburkan bintang abu-abu.
Tapi ketika kita menyesuaikan lebar bentang dalam, lebar bintang kuning berkurang, menampakkan bintang abu-abu.
Dari segi aksesibilitas, akan lebih bijaksana untuk meninggalkan nomor float di dalam span bagian dalam dan menyembunyikannya dengan
text-indent: -9999px
, sehingga orang dengan CSS dimatikan setidaknya akan melihat nomor floating point daripada bintang.Semoga itu masuk akal.
Diperbarui 2010/10/22
Sekarang bahkan lebih kompak dan lebih sulit untuk dipahami! Bisa juga diperas menjadi satu lapisan:
sumber
max-width
).Jika Anda hanya harus mendukung peramban modern, Anda dapat melakukannya dengan:
Anda hanya perlu mengubah angkanya menjadi a
class
, misclass='stars-score-50'
.Pertama, demo markup "yang dirender":
Kemudian demo yang menggunakan sedikit kode:
Kerugian terbesar dari solusi ini adalah:
width
pada elemen semu).Untuk mengatasinya, solusi di atas dapat dengan mudah diubah. The
:before
dan:after
bit perlu menjadi elemen yang sebenarnya di DOM (jadi kita perlu beberapa JS untuk itu).Yang terakhir ini dibiarkan sebagai latihan bagi pembaca.
sumber
Coba fungsi / file pembantu jquery ini
jquery.Rating.js
index.html
sumber
Mengapa tidak hanya memiliki lima gambar terpisah dari sebuah bintang (kosong, seperempat penuh, setengah penuh, tiga perempat penuh dan penuh) lalu masukkan saja gambar tersebut ke DOM Anda bergantung pada nilai peringkat yang terpotong atau kasar dikalikan dengan 4 ( untuk mendapatkan jumlah keseluruhan untuk perempat)?
Misalnya, 4,8618164 dikalikan dengan 4 dan dibulatkan adalah 19 yang akan menjadi bintang empat dan tiga perempat.
Alternatifnya (jika Anda malas seperti saya), cukup pilih satu gambar dari 21 (0 bintang hingga 5 bintang dengan kenaikan seperempat) dan pilih satu gambar berdasarkan nilai yang disebutkan di atas. Maka itu hanya satu kalkulasi yang diikuti dengan perubahan gambar di DOM (daripada mencoba mengubah lima gambar berbeda).
sumber
Saya akhirnya benar-benar bebas JS untuk menghindari jeda render sisi klien. Untuk mencapai itu, saya menghasilkan HTML seperti ini:
Untuk membantu aksesibilitas, saya bahkan menambahkan nilai rating mentah di atribut title [judul].
sumber
menggunakan jquery tanpa prototipe, perbarui kode js ke
Saya juga menambahkan atribut data dengan nama data-rating dalam rentang tersebut.
sumber
DEMO
Anda dapat melakukannya dengan 2 gambar saja. 1 bintang kosong, 1 bintang terisi.
Overlay gambar yang diisi di atas yang lain. dan ubah angka rating menjadi persentase dan gunakan sebagai lebar gambar pengisi.
sumber
Inilah pendapat saya menggunakan JSX dan font mengagumkan, terbatas hanya pada akurasi 0,5, meskipun:
Baris pertama untuk bintang utuh dan baris kedua untuk bintang setengah (jika ada)
sumber