星级评分系统

star
 {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style-type: none;
        }
        .container {
            width: 400px;
            margin: 10px auto;
        }
        #star ul, #star span {
            float: left;
            display: inline;
            height: 19px;
            line-height: 19px;
        }
        #star ul {
            margin: 0 10px;
        }
        #star li {
            float: left;
            cursor: pointer;
            background: url("images/star-img.png") no-repeat;
            width: 18px;
            text-indent: -9999px;
            background-position: -28px -2px;
            height: 18px;
            padding-right: 5px;
        }
        #star li.on {
            background-position: -2px -2px;
        }
        p {
            display: none;
            position: absolute;
            top: 30px;
            width: 159px;
            padding: 0 10px;
            font-style: normal;
            background-color: #eee;
            border: 1px solid #ddd;
        }
        em {
            display: block;
            color: orangered;
        }
        strong {
            margin-left: 10px;
            color: orangered;
        }
<body>
    <div id="star" class="container">
        <span style="font-size: 18px">点击星星就能打分</span>
        <ul id="box" class="stars">
            <li><a href="javascript:;"></a></li>
            <li><a href="javascript:;"></a></li>
            <li><a href="javascript:;"></a></li>
            <li><a href="javascript:;"></a></li>
            <li><a href="javascript:;"></a></li>
        </ul>
        <span></span>
        <p></p>
    </div>

<script>
    var star = document.getElementById('star'),
        imgs = star.getElementsByTagName('li'),
        op = document.getElementsByTagName('p')[0],
        box = document.getElementById('box'),
        oSpan = document.getElementsByTagName('span')[1],
        count = 0;
    var aMsg = [
        '很不满意|差的太离谱',
        '不满意|部分有破损',
        '一般|质量一般',
        '满意|质量不错',
        '非常满意|质量非常好'
    ];

    for (var i=1; i<=imgs.length; i++) {
        imgs[i-1].index = i;
        imgs[i-1].onmouseover = function () {
            imgSrc(this.index);
            op.style.display = 'block';
            op.style.left = box.offsetLeft + this.index * this.offsetWidth - 80 + 'px';
            op.innerHTML = '<em><b>' + this.index + '</b> 分 ' + aMsg[this.index-1].match(/(.+)\|/)[1] + '</em>' +
                    aMsg[this.index-1].match(/\|(.+)/)[1]
        };
        imgs[i-1].onmouseout = function () {
            imgSrc();
            op.style.display = 'none';
            console.log(1);
        };
        imgs[i-1].onclick = function () {
            count = this.index;
            op.style.display = 'none';
            oSpan.innerHTML = '<strong>' + this.index + '分</strong> (' + aMsg[this.index-1].match(/\|(.+)/)[1] + ')';
        };
        function imgSrc(a) {
            score = a || count;
            for (var i=0; i<imgs.length; i++) {
                imgs[i].className = i < score ?'on' : '';
            }
        }
    }

代码在网上搜的,其实一开始自己写的星星图片是用<img>src引进的, 但是在鼠标移动到不同的星星时, 总是闪一下, 就把星星图设为背景图了,但还是闪, 其实把星星之间用padding隔开就好了, 用margin的话每次离开一颗星星都要先把所有星星变为灰色, 就会闪一下

正则就是分别选择|前或|后的文本
浮动层左边的位置就是星星左边界再向左80px

background-position

/* Edge offsets values */
background-position: bottom 10px right 20px;
background-position: right 3em bottom 10px;
background-position: bottom 10px right;
background-position: top right 10px;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,652评论 0 8
  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 3,195评论 0 11
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,790评论 1 92
  • 中秋节,我们在不同的地点可以“海上生明月,天涯共此时”、“明月出天山,苍茫云海间”;在不同的心境中我们可以举“杯邀...
    北师广实阅读 968评论 0 1
  • 这是一首简单的小诗 为你而写 风吹散氤氲的雾气 荡起心中的一阵涟漪 愿得生豪的半杯才酒 与我最爱的我的“清如”坠入...
    露义莲华君阅读 700评论 0 0