我在這裏做了不少變化,但基本上我做了10顆半顆星來製造5級星星。當用戶點擊一半時,相應的星級總數將增加0.5或1.0(取決於點擊哪顆星的一半)。
我刪除了類似於您的點擊事件,但更好的方法是允許用戶再次點擊,然後從第一次點擊中撤消數學。您還會注意到一些通用代碼清理等
這裏的縮短,相關的HTML
<div id="stars">
<div class="star leftHalf"></div>
<div class="star rightHalf"></div>
[ ... ]
<div class="barHolder">
<table>
<tr>
<td>1 star</td>
<td class="bar"></td>
<td class="likes">20</td>
</tr>
[ ... ]
CSS
.star {
height:20px;
width:10px;
float:left;
margin-right:5px;
cursor:pointer;
}
.star.leftHalf{
margin-right:0px;
}
完整的JavaScript/jQuery的
var baractive = $('<div class="barActive"></div');
baractive.appendTo('.bar');
function checkNumber() {
$(".likes").each(function() {
var valueCurrent = parseFloat($(this).text()),
barActive = $(this).prev(".bar").children(".barActive");
if (isNaN(valueCurrent) || valueCurrent <= 20) {
barActive.css('width', 30);
} else if (valueCurrent <= 60) {
barActive.css('width', 80);
}else if (valueCurrent <= 70) {
barActive.css('width',120);
}
});
}
checkNumber();
$('.star').click(function() {
var starIndex = $("#stars div").index($(this)), // current half clicked; 0-9
starLevel = Math.ceil((starIndex+1)/2)-1, // current star clicked; 0-4
valCur = parseFloat($('.likes').eq(starLevel).text()), // current likes value
isHalfStar = starIndex % 2 ? false : true, // is this a half click (left side)?
valNew = valCur + (isHalfStar ? 0.5 : 1.0); // new likes value
$('.likes').eq(starLevel).text(valNew);
$(".star").removeClass("active").off("click");
$(this).addClass('active');
$(this).prevAll().addClass('active');
checkNumber();
});
而且工作jsFiddle http://jsfiddle.net/daCrosby/VU3LP/64/
爲什麼是半顆星?評級只是一個意見,通常並不是那麼詳細。讓他們只選擇整個星星,並在顯示退出時使用半顆星更加準確。如果您希望用戶更詳細地選擇值,只需添加更多星。 – GolezTrol
@ trol - 我同意,但不幸的是,這是簡短的。 – soum
使用半顆星的問題究竟是什麼?懸停的準確性?添加一個半星圖像?在**中更準確地說明你的技術問題。** – deceze