动手实现一个打字小游戏

415 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

nlwys-hk19a.gif

如图实现一个在线打字的h5,根据屏幕出现的字面,盲打字母,正确输入时自动加载下一个字母,输入错误的话,出现错误动画效果,不加载下一个。同时统计正确个数,正确率。我们一起看看吧~

一:需求分析

1.字母出现动画是由中心向四周放大的效果。

@keyframes zoomIn {
    0% {
        transform: scale(0.5);
        opacity: 0;
    }
    50% {
        transform: scale(1);
        opacity:1;
    }
}

2.正确输入时候,自动加载下一个字母。

var code = Math.floor(Math.random() * 26);// 获取:0~26 之间的随机数
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.charAt(code);// 获取与内容相对应的内容字母

3.错误输入时候,字母出现动画左右晃动的效果。

@keyframes slide{
    10%, 30%, 50%, 70%, 90%{
        transform: translateX(-50px);
    }
    20%, 40%, 60%, 80%, 100%{
        transform: translateX(50px);
    }
}

二:实现代码

1.html代码

<body onkeyup="key(event)">
    <main class="name1" id="char1">
        A
    </main>
    <div id="result">
        请在键盘上输入字母
    </div>
</body>

2.css代码

body {
    height: 100%;
    background-image: radial-gradient(circle, #fff, pink, red);
    /*径向渐变色  从中心点向四周扩散 */
    text-align: center;
    overflow: hidden;
}
.name1 {
    color: palevioletred;
    font-size: 400px;
    text-shadow: 10px 0 20px #000;
    /*文本阴影 x轴(正右负左)  y轴(正下负上) 阴影模糊度 */
}

#result {
    color: darkorchid;
}
.right {
    animation: zoomIn 1s;
}
@keyframes zoomIn {
    0% {
        transform: scale(0.5);
        opacity: 0;
    }
    50% {
        transform: scale(1);
        opacity:1;
    }
}
.error{
    color: purple;
    animation: slide 1s;
}
@keyframes slide{
    10%, 30%, 50%, 70%, 90%{
        transform: translateX(-50px);
    }
    20%, 40%, 60%, 80%, 100%{
        transform: translateX(50px);
    }
}

3.js代码

var char = document.getElementById('char');
var chars;
var result = document.getElementById('result');
var okCount = 0;// 正确个数
var errorCount = 0;// 错误个数
function show() {
    var code = Math.floor(Math.random() * 26);// 获取:0~26 之间的随机数
    chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.charAt(code);// 获取与内容相对应的内容字母
    char.innerHTML = chars;
}
show(); // 执行函数
// 展示正确率
function showResult() {
    var i = 0;
    if (okCount > 0) {
        i = okCount / (okCount + errorCount) * 100;
    }
    result.innerHTML='正确数'+okCount+',错误数'+errorCount+'正确率:'+i.toFixed(2)+'%';
}
// 鼠标按下事件
function key(event) {
    okCount++;
    var key = event.key.toUpperCase(); // 转大写
    function clearAnimation() {
        char.className = 'name1';
    } // 清除动画
    if (key == chars) {
        show();// 弹出新字母
        char.className = 'name1 right';// 添加输入正确的样式
        setTimeout(clearAnimation, 500);// 暂停500毫秒后清除动画,执行clearanimation函数

    } else {
        errorCount++;
        char.className = 'name1 error';// 添加输入错误的样式
        setTimeout(clearAnimation, 500);
    }
    showResult();
}

如上就是打字练习的实现代码了,还是很有意思的,可以锻炼我们的盲打技术。也是一个小游戏,快动手做起来吧~