两颗星星实现的星星点击评分效果实例页面
回到相关文章 »代码:
CSS代码:
/* 星星点灯照亮我的家门 */ .star_bg { width: 120px; height: 20px; background: url(star.png) repeat-x; position: relative; overflow: hidden; } .star { height: 100%; width: 24px; line-height: 6em; position: absolute; z-index: 3; } .star:hover { background: url(star.png) repeat-x 0 -20px!important; left: 0; z-index: 2; } .star_1 { left: 0; } .star_2 { left: 24px; } .star_3 { left: 48px; } .star_4 { left: 72px; } .star_5 { left: 96px; } .star_1:hover { width: 24px; } .star_2:hover { width: 48px; } .star_3:hover { width: 72px; } .star_4:hover { width: 96px; } .star_5:hover { width: 120px; } label { display: block; _display:inline; height: 100%; width: 100%; cursor: pointer; } /* 幕后的英雄,单选按钮 */ .score { position: absolute; clip: rect(0 0 0 0); } .score:checked + .star { background: url(star.png) repeat-x 0 -20px; left: 0; z-index: 1; } .score_1:checked ~ .star_1 { width: 24px; } .score_2:checked ~ .star_2 { width: 48px; } .score_3:checked ~ .star_3 { width: 72px; } .score_4:checked ~ .star_4 { width: 96px; } .score_5:checked ~ .star_5 { width: 120px; } .star_bg:hover .star { background-image: none; } /* for IE6-IE8 JS 交互 */ .star_checked { background: url(star.png) repeat-x 0 -20px; left: 0; z-index: 1; }
HTML代码:
<div id="starBg" class="star_bg"> <input type="radio" id="starScore1" class="score score_1" value="1" name="score"> <a href="#starScore1" class="star star_1" title="差"><label for="starScore1">差</label></a> <input type="radio" id="starScore2" class="score score_2" value="2" name="score"> <a href="#starScore2" class="star star_2" title="较差"><label for="starScore2">较差</label></a> <input type="radio" id="starScore3" class="score score_3" value="3" name="score"> <a href="#starScore3" class="star star_3" title="普通"><label for="starScore3">普通</label></a> <input type="radio" id="starScore4" class="score score_4" value="4" name="score"> <a href="#starScore4" class="star star_4" title="较好"><label for="starScore4">较好</label></a> <input type="radio" id="starScore5" class="score score_5" value="5" name="score"> <a href="#5" class="star star_5" title="好"><label for="starScore5">好</label></a> </div>
效果:
JS代码:
// IE6-IE8 不认识的干活 (function() { var eleStarBg = null, // 单选框以及长度 eleRadios, lenRadios = 0, // 星星元素们 eleStars, // 选中的星星元素 eleStarChecked = null, // 改变IE6-8星星样式的类名 clChecked = "star_checked"; var funStarState = function(eleRadio) { if (eleRadio && eleRadio !== eleStarChecked) { var index = eleRadio.indexStore; if (eleStarChecked) { eleStarChecked.className = eleStarChecked.className.replace(" " + clChecked, ""); eleStarChecked.style.width = ''; } if (eleStars[index].className.indexOf(clChecked) == -1) { eleStars[index].className = eleStars[index].className + " " + clChecked; // 对应的宽度改变走起 eleStars[index].style.width = (index + 1) * 24 + "px"; eleStarChecked = eleStars[index]; } } }; if (typeof window.screenX == "undefined" && (eleStarBg = document.getElementById("starBg"))) { // 单选框们 eleRadios = eleStarBg.getElementsByTagName("input"); lenRadios = eleRadios.length; // a标签的星星元素们 eleStars = eleStarBg.getElementsByTagName("a"); for (var i=0; i<lenRadios; i+=1) { // 存储索引,方便找到对应的星星元素 eleRadios[i].indexStore = i; // 单选选中后 eleRadios[i].onclick = function() { if (this.checked) { funStarState(this); } }; } // 如果你还想兼容IE6浏览器 if (!window.XMLHttpRequest) { for (var j=0; j<lenRadios; j+=1) { eleStars[j].indexStore = j; eleStars[j].onclick = function() { var id = this.href.split("#")[1], eleRadio = document.getElementById(id); if (eleRadio) { eleRadio.checked = true; funStarState(eleRadio); } return false; }; } // 鼠标经过 eleStarBg.onmouseenter = function() { if (eleStarChecked) { eleStarChecked.className = eleStarChecked.className.replace(" " + clChecked, ""); eleStarChecked.style.width = ''; } }; // 鼠标移出 eleStarBg.onmouseleave = function() { if (eleStarChecked) { eleStarChecked.className = eleStarChecked.className + " " + clChecked; eleStarChecked.style.width = (eleStarChecked.indexStore + 1) * 24 + "px"; } }; } } })();