html+css+js小游戏你的鼠标有多快

老师布置的一个小练习,现在网上找案例学习着来写,比较少而且找到的都不太喜欢,所以只能自己靠着仅有的一点小知识花了两小时,勉强写了一个出来,也可以说是凑出来的,效果大概达到了,但是还有一点小bug,期待各位大佬、小伙伴解决了能@我一下,一起学习

<!DOCTYPE html>
<html lang="en">
<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{
      position: relative;
      width: 800px;
      height: 600px;
      margin: 60px auto;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
      border: 1px solid red;
    }
    .container{
      position: relative;
      width: 100%;
      height: 500px;
      border: 1px solid red;
      overflow: hidden;
    }
    .score{
      position: absolute;
      right: 0;
      top: 0;
      width: 100px;
      height: 100px;
      line-height: 50px;
      text-align: center;
      background-color: rgb(255, 62, 62);
    }
    .game img{
      position: absolute;
      top: -50px;
      /* animation: all 3s linear; */
      animation: expression 6s linear;
    }
    @keyframes expression{
      0%{ top:-15%;}
      100%{ top:115%}
    }
    .shake {
     animation: shake 300ms ease-in-out;
    }
    @keyframes shake {
        20%, 80% { transform: translateX(-20px); }
        30%, 70% { transform: translateX(-10px); }
        50% { transform: translateX(0); }
    }
  </style>
</head>
<body>
  <div class="box">
    <h4>你的鼠标有多快?</h4>
    <div>游戏说明。。。。。。。</div>
    <button>开始游戏</button>

    <!-- 游戏面板 -->
    <div class="container">
      <div class="game"></div>
    </div>

    <!-- 计分板 -->
    <div class="score">
      <div>得分:<span class="add">0</span>分</div>
      <div>失分:<span class="sub">0</span>分</div>
    </div>
  </div>

  <script>
    //获取游戏表情
    let game = document.querySelector(".game");
    //加分
    let add = document.querySelector(".add");
    //减分
    let sub = document.querySelector(".sub");
    //开始按钮
    let btn = document.querySelector("button");
    //大盒子
    let container = document.querySelector(".container");

    // console.log(container.clientHeight);
    //点击开始游戏
    btn.onclick = function(){
      expression()
      //开始游戏按钮禁止状态
      btn.innerText = "游戏正在进行中...";
      btn.disabled = true;
    }
    
    //生成表情
    function expression(){
      
      //生成表情盒子
      var e = document.createElement("img");
      //随机表情
      var bq =  Math.ceil(Math.random() * 50);
      //表情位置
      var left = Math.random() * 90 + 4;
      //添加img图片属性
      e.setAttribute("src",`qq/${bq}.gif`);
      //添加表情样式
      e.style.cssText = `display:inline-block;width:40px;height:40px;left:${left}%`;
      //添加到父元素中
      game.appendChild(e)
      
      //点击变成猪头并加分
      game.onclick = function(){
        //切换猪头
        e.src = "qq/52.gif";
        //加分
        add.innerHTML = (add.innerHTML*1)+1;
        //删除元素并继续游戏
        e.remove()
        expression()
      }

      //定时器持续监听表情距离父亲顶部的距离
      let inter = setInterval(() => {

        //如果大于父亲高度则删除表情、减分等操作
        if(e.offsetTop >= container.clientHeight){
          //添加抖动效果
          container.classList.add('shake')

          setTimeout(() => {
            //删除抖动
            container.classList.remove('shake')
            //删除监听定时器
            clearInterval(inter)
            //减分
            sub.innerHTML = (sub.innerHTML*1)+1;
            //超出距离删除元素
            e.remove()
            //判断得分是否大于失分,超出则重新初始化,没有则继续进行游戏
            if(sub.innerHTML>add.innerHTML){
              alert("游戏结束!!")
              sub.innerHTML = 0;
              add.innerHTML = 0;
              btn.innerText = "开始游戏";
              btn.disabled = false;
            }else{
              //继续进行游戏
              expression()
            }
          }, 100);
        }
      }, 150);
    }
    
  </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值