นี่เป็นวิธีแก้ปัญหาสำหรับคุณโดยใช้ภาพขนาดเล็กและเรียบง่ายเพียงภาพเดียวและองค์ประกอบช่วงที่สร้างขึ้นโดยอัตโนมัติเพียงภาพเดียว:
CSS
span.stars, span.stars span {
display: block;
background: url(stars.png) 0 -16px repeat-x;
width: 80px;
height: 16px;
}
span.stars span {
background-position: 0 0;
}
ภาพ
(ที่มา: ulmanen.fi )
หมายเหตุ:ไม่ไม่ hotlink กับภาพดังกล่าวข้างต้น! คัดลอกไฟล์ไปยังเซิร์ฟเวอร์ของคุณเองและใช้งานจากที่นั่น
jQuery
$.fn.stars = function() {
return $(this).each(function() {
// Get the value
var val = parseFloat($(this).html());
// Make sure that the value is in 0 - 5 range, multiply to get width
var size = Math.max(0, (Math.min(5, val))) * 16;
// Create stars holder
var $span = $('<span />').width(size);
// Replace the numerical value with stars
$(this).html($span);
});
}
หากคุณต้องการ จำกัด ดาวให้มีขนาดดาวเพียงครึ่งเดียวหรือสี่ส่วนให้เพิ่มแถวใดแถวหนึ่งเหล่านี้ก่อนvar size
แถว:
val = Math.round(val * 4) / 4; /* To round to nearest quarter */
val = Math.round(val * 2) / 2; /* To round to nearest half */
HTML
<span class="stars">4.8618164</span>
<span class="stars">2.6545344</span>
<span class="stars">0.5355</span>
<span class="stars">8</span>
การใช้งาน
$(function() {
$('span.stars').stars();
});
เอาต์พุต
(ที่มา: ulmanen.fi )
การสาธิต
http://www.ulmanen.fi/stuff/stars.php
สิ่งนี้อาจเหมาะกับความต้องการของคุณ ด้วยวิธีนี้คุณไม่จำเป็นต้องคำนวณความกว้างสามในสี่หรืออะไรไม่ใช่ความกว้างของดาวเพียงแค่ให้มันลอยแล้วมันจะให้ดาวของคุณ
คำอธิบายเล็กน้อยเกี่ยวกับวิธีการนำเสนอของดวงดาว
สคริปต์สร้างสององค์ประกอบช่วงระดับบล็อก ทั้งสองช่วงเริ่มต้นมีขนาด 80px * 16px และภาพพื้นหลัง stars.png ช่วงจะซ้อนกันเพื่อให้โครงสร้างของช่วงมีลักษณะดังนี้:
<span class="stars">
<span></span>
</span>
ช่วงด้านนอกได้รับของbackground-position
0 -16px
นั่นทำให้มองเห็นดวงดาวสีเทาในช่วงนอก เนื่องจากช่วงนอกมีความสูง 16px และrepeat-x
จะแสดงเพียง 5 ดาวสีเทา
ช่วงด้านบนมืออื่น ๆ มีbackground-position
ของ0 0
ซึ่งทำให้เพียงดาวสีเหลืองมองเห็นได้
แน่นอนว่าสิ่งนี้จะใช้ได้กับไฟล์ภาพสองไฟล์ที่แยกจากกัน star_yellow.png และ star_gray.png แต่เนื่องจากดวงดาวมีความสูงคงที่เราจึงสามารถรวมเป็นภาพเดียวได้อย่างง่ายดาย นี้ใช้เทคนิค CSS เทพดา
ขณะนี้เมื่อมีการซ้อนทับกันแล้วช่วงเวลาดังกล่าวจะซ้อนทับกันโดยอัตโนมัติ ในกรณีเริ่มต้นเมื่อความกว้างของทั้งสองช่วงคือ 80px ดาวสีเหลืองจะบดบังดาวสีเทาอย่างสมบูรณ์
แต่เมื่อเราปรับความกว้างของช่วงภายในความกว้างของดาวสีเหลืองจะลดลงเผยให้เห็นดาวสีเทา
การช่วยสำหรับการเข้าถึงมันจะเป็นการดีกว่าที่จะปล่อยให้ตัวเลขลอยอยู่ในช่วงภายในและซ่อนไว้ด้วยtext-indent: -9999px
เพื่อให้อย่างน้อยคนที่ปิด CSS จะเห็นตัวเลขทศนิยมแทนที่จะเป็นดาว
หวังว่าจะสมเหตุสมผลบ้าง
อัปเดตเมื่อ 2010/10/22
ตอนนี้กระชับและเข้าใจยากยิ่งขึ้น! สามารถบีบลงไปที่ซับเดียวได้:
$.fn.stars = function() {
return $(this).each(function() {
$(this).html($('<span />').width(Math.max(0, (Math.min(5, parseFloat($(this).html())))) * 16));
});
}