美文网首页
JSDOM案例:猜字游戏

JSDOM案例:猜字游戏

作者: 张培跃 | 来源:发表于2022-04-10 18:12 被阅读0次
image.png
点我预览效果

- css

*{
    padding:0;
    margin:0;
}
#app{
    position: relative;
    width: 600px;
    height: 400px;
    border:2px dashed black;
    margin:20px auto;
}
#timed{
    position: absolute;
    top:20px;
    left:20px;
    font-size:20px;
}
#score{
    position: absolute;
    top:20px;
    right:20px;
    font-size:20px;
}
#main{
    font-size: 100px;
    text-align: center;
    line-height: 300px;
}
p{
    font-size: 12px;
    position: absolute;
    bottom:120px ;
    width: 100%;
    text-align: center;
}
ul{
    width: 100%;
    text-align: center;
    line-height: 50px;
    font-size: 40px;
    list-style: none;

}
li{
    display: inline-block;
    margin:0 20px;
    cursor: pointer;
}
.mask{
    position: absolute;
    background: rgba(1,1,1,0.8);
    width: 100%;
    height: 100%;
    top:0;
    left:0;
    display: flex;
    align-items: center;
    justify-content: center;
}
.mask button{
    width: 100px;
    height: 100px;
    font-size: 20px;
    color:wheat;
    background: gray;
    border:none;
}
.mask button:hover{
    background: red;
    cursor: pointer;
}

- js

// 规范1:所有获取dom元素并赋值的语句写到最上面
// 规范2:在函数与函数之间不允许出现其它语句
// 获得开始按钮元素
var startBtn = document.querySelector("#start");
// 获得遮罩层元素
var mask = document.querySelector(".mask");
// 获得显示汉字的main元素
var main = document.querySelector("#main");
// 获得li
var lis = document.querySelectorAll("ul li");
// 获得存放分数的score
var scoreDiv = document.querySelector("#score");
// 获得存放倒计时的元素
var timedDiv = document.querySelector("#timed span");
// 定义数组,用于存储显示的汉字
var fonts = ["红","蓝","绿","黄","黑"];
// 定义数组,用于存储颜色
var colors = ["red","blue","green","yellow","black"];
// 分数统计
var scoreNum = 0;
// 倒计时的时间
var timeNum = 10;
// 点击按钮事件,隐藏遮罩层
startBtn.onclick = function(){
    // 隐藏遮罩层
    mask.style.display = "none";
    // 分数初始化
    scoreDiv.innerHTML = scoreNum;
    // 倒计时初始化
    timedDiv.innerHTML = timeNum;
    //初始化main元素内容
    initMain();
    // 初始化LI
    initLi();
    // 开始倒计时
    countDown();
}
function countDown(){
    var timer = setInterval(function (){
        // 倒计时减1
        timedDiv.innerHTML = --timeNum;
        // 判断时间已结束
        if(timeNum === 0){
            // 移除定时器
            clearInterval(timer);
            // 倒计时的时间重置
            timeNum = 10;
            if(scoreNum>=3) alert("你的眼睛非常棒");
            else if(scoreNum>=1) alert("您 有点色弱")
            else alert("你的眼睛瞎了")
            // 分数重置
            scoreNum = 0;
            scoreDiv.innerHTML = scoreNum;

            mask.style.display = "flex"
        }
    },1000)
}
// 初始化LI
function initLi(){
    // 将ul->li 内的汉字以及汉字颜色随机。
    // 1->先复制一份数组出来
    var copyFonts = fonts.slice();
    var copyColors = colors.slice();
    // 2->将数组copyFonts,copyColors内的元素随机排序
    copyFonts.sort(function (){
        return Math.random()-0.5
    })
    copyColors.sort(function (){
        return Math.random()-0.5
    })
    // 3->将数组的内容放置到li内。
    lis.forEach(function (item,index){
        item.innerHTML = copyFonts[index];
        item.style.color = copyColors[index];
        // 为li增加点击事件
        item.onclick = function(){
            // 判断当前的文字是否与main当中的文字 颜色一致
            var mainIndex = main.dataset.index/1;
            // 如何得到li文字的下标
            var liIndex = fonts.indexOf(this.innerHTML);
            if(mainIndex === liIndex){
                scoreDiv.innerHTML = ++scoreNum;
                console.log("成功")
            }else{
                scoreDiv.innerHTML = --scoreNum;
                console.log("失败")
            }
            //初始化main元素内容
            initMain();
            // 初始化LI
            initLi();
        }
    })
}
// 初始化main元素内容
function initMain(){
    // 将id为main元素的内容设置为随机的红蓝绿黄黑
    main.innerHTML = fonts[getRandom()];
    // 自定义属性用于保存颜色下标
    main.dataset.index =getRandom();
    // 将id为main元素的文字颜色设置为随机的red,blue,green,yellow,black
    main.style.color = colors[main.dataset.index ];
}
// 写一个方法用获得随机数组下标
function getRandom(){
    return Math.floor(Math.random()*fonts.length);
}

- html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
    <div id="app">
        <div id="timed">倒计时:<span>60</span></div>
        <div id="score">0</div>
        <div id="main">黑</div>
        <p>请根据上面的文字的颜色在下方选择正确的文字</p>
        <ul>
            <li>红</li>
            <li>蓝</li>
            <li>绿</li>
            <li>黄</li>
            <li>黑</li>
        </ul>
        <div class="mask">
            <button id="start">开始</button>
        </div>
    </div>
</body>
<script src="index.js"></script>
</html>

相关文章

  • JSDOM案例:猜字游戏

    - css - js - html

  • NodeJS 用jsdom抓取html数据

    先要装jsdom: npm install jsdom. var jsdom = require('jsdom')...

  • 猜字游戏

    吾校甲子,余无厚礼,谜语一则,每句一词,连词成句,以表敬意! 兑穿厚衣遮两眉 满口甜蜜有厚衣 毋字长腿遇骨折 左林...

  • 猜字游戏

    一山更比一山高( ) 闹市无市静悄悄( ) 栽树无木有田共( ) 田中无物多消遥( ) 四张桌子腿...

  • 猜字游戏

  • 猜画汉字

    形象有趣的猜字游戏

  • rust官方书基础部分

    rust官方的猜字游戏

  • 猜字小游戏

    写一个猜数字的游戏,要求:系统生成一个随机数(1-10),用户有3次机会,输入数字去猜。 如果输入数 小了 或者 ...

  • 猜字游戏 2019.11.25

    今天晚上吃饱饭,我和爸爸玩猜字的游戏。我说字的笔顺,爸爸来猜。我说:“撇,横,竖提,捺”,爸爸猜不出来。我...

  • 孩子的暴脾气! 2018-08-21

    宋佳佳迷上了一种猜字游戏,每当做完功课后,她都会捧着一本厚厚的书本来做这些猜字游戏。可是,这种游戏还是有一定的难度...

网友评论

      本文标题:JSDOM案例:猜字游戏

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