两颗星星实现的星星点击评分效果实例页面

回到相关文章 »

代码:

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";
                }
            };
        }
    }	
})();