欢迎关注得胜的git仓库

舒尔特方格 记忆力训练 前端源代码

百度的舒尔特方格介绍主要内容如下:

舒尔特方格(Schulte Grid)是一种训练注意力的方法。在一张方形卡片上画上 1cm*1cm 的 25 个方格,格子内任意填写上阿拉伯数字 1 ~ 25 等共 25 个数字。训练时,要求被测者用手指按 1 ~ 25 的顺序依次指出其位置,同时诵读出声,施测者一旁记录所用时间。数完 25 个数字所用时间越短,注意力水平越高。

 

以 7—12 岁年龄组为例,能达到26"以上为优秀,学习成绩应是名列前茅, 42"属于中等水平,班级排名会在中游或偏下, 50"则问题较大,考试会出现不及格现象。

以 12 ―― 14 岁年龄组为例,能到达 16 "以上为优良,学习成就应是名列前茅, 26 "属于中等水平,班级排名会在中游或偏下, 36 "则问题较大,测验会呈现不合格现象。

18 岁及以上成年人最好可到达 8 "的程度, 20 "为中等程度。

 

由于纸质的是固定的位置,不能随机排布数字,记忆好了就可以提速,容易产生厌倦心理,所以我就想着用程序写一个,每次都刷新界面。

下面给出前端的网页代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }
        .left-time{
            text-align: center;
            color: #e73480;
            margin-top: 10px;
            height: 20px;
            font-size: 20px;
        }
        .num-area{
            width: 200px;
            height: 200px;
            display: flex;
            flex-wrap: wrap;
            margin: 20px auto;
            border: 1px solid #e73480;
            cursor: pointer;
        }
        .num-area .num-item{
            width: 20%;
            height: 20%;
            border: 1px solid #e73480;
            text-align: center;
            line-height: 38px;
            cursor: pointer;
        }
        .num-area .num-item.selected{
            background: green;
        }
        .game-status{
            padding: 30px;
            text-align: center;
        }
        .game-status .module{
            display: inline-block;
            padding: 10px 20px;
            border-radius: 5px;
            cursor: pointer;
        }
        .count-up{
            margin-right: 20px;
        }
        .game-status .module.active{
            background-color: #e73480;
            color: #fff;
        }
        .start{
            cursor: pointer;
            display: inline-block;
            padding: 10px 20px;
            border-radius: 5px;
            background-color: #e73480;
            color: #fff;
            margin-bottom: 15px;
        }
    </style>
</head>
<body>
    <div class="left-time"></div>
    <div class="num-area">

    </div>
    <div class="game-status">
        <div class="btn start">开始</div>
        <!-- <div class="btn pause">暂停</div> -->
        <br />
        <div class="module count-up">计时模式</div>
        <div class="module count-down">挑战模式</div>
    </div>
    
<script>
    var arr = [];
    for(var i = 1; i <= 25; i++){
        arr.push(i);
    }

    // 数组乱序
    function disOrder(arr){
        function compare(a, b){
            return 0.5 - Math.random();
        }
        arr.sort(compare);
        return arr;
    }

    arr = disOrder(arr);
    console.log(arr);

    // 通过class过去元素
    function getClass(className){
        return document.getElementsByClassName(className);
    }

    var timeDom = getClass("left-time")[0];
    var numsDom = getClass("num-area")[0];
    var statusDom = getClass("game-status")[0];

    // 渲染1-25的方格
    function renderNums(numList){
        var str = "";
        for(var i = 0, len = numList.length; i < len; i++){
            str += '<div class="num-item">'+ numList[i] +'</div>'
        }
        numsDom.innerHTML = str;
    }

    // renderNums(arr);

    var findNum = 1; // 当前需要查找的下标
    var canChoose = false;
    var gameModule = 0; // 0 count-up  1 count-down

    // 为每个方格绑定点击事件——事件委托
    function bindEvent(){
        numsDom.onclick = function (e) {
            if(!canChoose){
                console.log("当前不可点击");
                alert("请点击开始继续");
                return;
            }
            e = e || event;
            console.log(e);
            var target = e.target || e.srcElement;
            if(target.classList.contains("num-item")){
                if(target.innerHTML == findNum){
                    target.classList.add("selected");

                    if(findNum == arr.length){
                        // alert("胜利了");
                        success();
                    }else{
                        findNum += 1;
                    }
                }else{
                    // alert("请按顺序点击");
                }
            }
        }
    }

    bindEvent();

    // 渲染当前模式
    var modules = getClass("module");
    function renderModule(){
        for(var i = 0, len = modules.length; i < len; i++){
            if(gameModule == i){
                modules[i].classList.add("active");
            }else{
                modules[i].classList.remove("active");
            }
        }
    }

    renderModule();

    // 模式切换
    for(var i = 0, len = modules.length; i < len; i++){
        (function(n){
            modules[n].onclick = function () {
                console.log(startTime , timer);
                if(startTime || timer){
                    console.log("当前正在"+gameModule+"模式游戏,不可以切换");
                    return;
                }
                gameModule = n;
                renderModule();
            }
        })(i);
    }
    
    var startTime = 0;
    var countDown = 15;
    var timer;
    var countUpTimer;

    // 开始
    var startBtn = getClass("start")[0];
    startBtn.onclick = function () {
        console.log(timer,"start")
        if(gameModule == 0){ // 计时模式
            if(startTime){
                alert("游戏正在进行中");
                return;
            }
            init();
            startTime = Date.now();
            var count = 0;
            timeDom.innerHTML = count;
            countUpTimer = setInterval(function(){
                ++count;
                timeDom.innerHTML = count;
            },1000);
        }else{ // 挑战模式 倒计时
            if(timer){
                alert("游戏正在进行中");
                return;
            }
            init();
            countDown = 15;
            timeDom.innerHTML = countDown;
            timer = setInterval(function () {
                console.log(timer);
                countDown --;
                timeDom.innerHTML = countDown;
                if(countDown == 0){
                    canChoose = false;
                    clearInterval(timer);
                    timer = undefined;
                    console.log(timer,"失败clear");
                    setTimeout(function () {
                        alert("挑战失败");
                    },0);
                }
            }, 1000);
        }
    }

    // 完成任务的处理
    function success () {
        canChoose = false;
        console.log("胜利");
        if(gameModule == 0){
            var endTime = Date.now();
            timeDiff = parseInt((endTime - startTime) / 1000 * 10) / 10;
            console.log("用时" + timeDiff);
            startTime = 0;
            clearInterval(countUpTimer);
            console.log("成功清理startTime");
            // alert("用时" + timeDiff + "秒");
        }else if(gameModule == 1){
            clearInterval(timer);
            timer = undefined;
            console.log(timer,"成功clear")
            alert("挑战成功");
        }else{
            console.log("模式异常");
        }
    }

    function init(){
        arr = disOrder(arr);
        renderNums(arr);
        findNum = 1;
        canChoose = true;
    }
</script>
</body>
</html>

界面入下图

 

posted on 2021-01-17 15:50  web得胜  阅读(1134)  评论(2编辑  收藏  举报

导航

感谢观看web得胜的博客,如果您觉得对你有帮助,请点赞支持一下哦~。发现问题请留言指正,谢谢!