可触摸可半星评级效果

作者: kerush | 来源:发表于2017-08-03 11:14 被阅读40次
前端入坑纪 36

如题,继续上回效果 -> 《简单的星星评价》效果 的 升级版!

当然拉,其实星星图片也就加了一张半星而已。

OK,first things first!项目链接

滑动出半星
HTML 结构
    <div class="mWrp">
        <p>您的评价:</p>
        <p id="starWrp">
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
        </p>
    </div>

结构和上回的一样,简洁有效!

CSS 结构
        body {
            padding: 0;
            margin: 0;
            background-color: #F4F4F4;
        }
        
        p {
            padding: 0;
            margin: 0;
        }
        
        ul,
        li {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        
        a {
            text-decoration: none;
            color: #525252;
        }
        
        img {
            vertical-align: middle;
        }
        
        .fl {
            float: left;
        }
        
        .fr {
            float: right;
        }
        
        .clear::after {
            display: block;
            content: "";
            clear: both;
        }
        
        .mWrp {
            width: 100%;
            margin: 0 auto;
            max-width: 640px;
        }
        
        .mWrp p {
            margin: 6px 0;
            padding: 8px;
        }
        
        #starWrp {
            display: inline-block;
        }
        
        #starWrp a {
            display: inline-block;
            height: 30px;
            width: 30px;
            background-image: url(star00.png);
            background-size: 100% auto;
            background-position: center center;
            margin: 0 3px;
        }
        
        #starWrp a.on {
            background-image: url(star10.png);
        }
        
        #starWrp a.onaf {
            background-image: url(star05.png);
        }

添加半颗星星的背景

JS 结构
        var stars = document.getElementById("starWrp");
        var als = stars.getElementsByTagName('a');
        var startX = endX = counter = 0;
        stars.addEventListener("touchstart", function(evt) {
            startX = evt.targetTouches[0].clientX;// 获取触摸起始点的clientX值
        });
        stars.addEventListener("touchmove", function(evt) {
            endX = evt.targetTouches[0].clientX;// 获取滑动时变化的clientX值
            var cNum = Number(endX - startX);// 数字化clientX的差值
            var bNum = cNum / 30 <= 5 ? cNum / 30 : 5;// 这里其实就是if else的简化。如果 cNum / 30 小于等于5,则取改值,否则取5

           // 先重置所有星星为空
            for (var j = 0; j < als.length; j++) {
                als[j].className = "";
            }

            // 将到bNum为止的星星点亮
            for (var m = 0; m < bNum; m++) {
                als[m].className = "on";
            }

             // 判断bNum是否在半颗的区间,如果是,点亮半个星星效果
            for (var n = 0; n < als.length; n++) {
                if (bNum > n && bNum < n + 0.5) {
                    als[n].className = "onaf";
                }
            }

             // 将bNum赋给全局变量counter
            counter = bNum;
        });


        // 用counter判断星级数,并控制台打印
        stars.addEventListener("touchend", function(evt) {
            switch (true) {
                case counter == 0:
                    console.log("零星")
                    break;
                case counter > 0 && counter < 0.5:
                    console.log("半星")
                    break;
                case counter > 0.5 && counter < 1:
                    console.log("一星")
                    break;
                case counter > 1 && counter < 1.5:
                    console.log("一颗半星")
                    break;
                case counter > 1.5 && counter < 2:
                    console.log("两星")
                    break;
                case counter > 2 && counter < 2.5:
                    console.log("两颗半星")
                    break;
                case counter > 2.5 && counter < 3:
                    console.log("三星")
                    break;
                case counter > 3 && counter < 3.5:
                    console.log("三颗半星")
                    break;
                case counter > 3.5 && counter < 4:
                    console.log("四星")
                    break;
                case counter > 4 && counter < 4.5:
                    console.log("四颗半星")
                    break;
                case counter > 4.5:
                    console.log("五星")
                    break;
            }
        });

依言更新了昨天承诺的效果,不过,总感觉最后的switch 函数有点傻!。那么有兴趣的同学,可以好好研究一翻,期待你我共同进步!!!

好了,到此,本文告一段落!感谢您的阅读!祝你身体健康,阖家幸福!

相关文章

  • 可触摸可半星评级效果

    前端入坑纪 36 如题,继续上回效果 -> 《简单的星星评价》效果 的 升级版! 当然拉,其实星星图片也就加了一张...

  • 解决touchs与UITapGestureRecognizer冲

    两者同时使用时touchesBegan执行延时touchesCancelled先执行因此看不到触摸效果,通过断点可...

  • 无法可及的触摸

    我在被一张温软的手掌抚摸。 我沉默无声,她也一言不发。窗外,小雨淅沥。她摩挲着我光洁的皮肤,一遍又一遍,似乎在寻找...

  • 可触摸的恋思

    郑重声明:此文系原创首发,文责自负。 云絮萌生稠密的记忆 繁茂着光阴河岸 月光拨开一帘夜色 将文字里流淌的诗意 渡...

  • 科技与艺术

    科技可触摸,人文化探索

  • web移动开发资源整理之常见bug的解决方案

    模拟按钮hover效果 移动端触摸按钮的效果,可明示用户有些事情正要发生,是一个比较好体验,但是移动设备中并没有鼠...

  • 自定义RatingBar

    自定义RatingBar,可设置图片大小、间隔,是否可触摸改变等级 先看下效果:当手指滑动(或点击)时,Ratin...

  • 从零学React Native之09可触摸组件

    可触摸组件有:TouchableHighlight,TouchableNativeFeedback,Touchab...

  • 可遇见的,不可触摸

    可预见的是 椋鸟飞过天涯千万树 雁唳和江南的蝉汐,从不会相逢 可预见的是 天上的星宿日夜开合 地上的人准时走入各自...

  • React Native自定义导航栏

    之前我们学习了可触摸组件和页面导航的使用的使用:从零学React Native之09可触摸组件...从零学Reac...

网友评论

    本文标题:可触摸可半星评级效果

    本文链接:https://www.haomeiwen.com/subject/iggulxtx.html