JS定时器与多分支选择结构(挡板接球)

 小球根据键盘操作移动(基础学习代码)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
  .f{
    width: 600px;
    height: 600px;
      border: 1px solid deepskyblue;
      position: relative;
  }
  .z{
      width: 100px;
      height: 100px;
      background-color: mediumslateblue;
      border-radius: 50%;
      position: absolute;
  }

</style>
<body>
<div class="f">
  <div class="z" id="ball"></div>
</div>
</body>
<script>
    //根据id获取dom
    let ball=document.getElementById(`ball`)
    //球心初始坐标
    let x=50,y=50
    let dy=10//按一次键盘,y轴方向运动
    let dx=10
    //感知键盘 keycode下40 上38 左37 右39
    document.onkeydown=function (e){
        switch (e.keyCode){
            case 38:
                ball.style.top=y-50+`px`
                y-=dy
                break;

            case 40:
                y+=dy
                ball.style.top=y-50+`px`
                break;

            case 37:
                x-=dx
                ball.style.left=x-50+`px`
                break;

            case 39:
                x+=dx
                ball.style.left=x-50+`px`
                break;

        }
    }
</script>
</html>

挡板接球

项目要点分析

1.随机碰撞点
2.镜像反弹
3.挡板移动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .f{
            width: 1200px;
            height: 800px;
            border: 5px solid skyblue;
            position: relative;
        }
        .z{
            width: 100px;
            height: 100px;
            border-radius: 50%;
            background-color: pink;
            position: absolute;
            left: 550px;
            top: 350px;
        }
        .b{
            width: 400px;
            height: 20px;
            top: 780px;
            border: 2px solid gold;
            background-color: gold;
            position: absolute;
        }
    </style>
</head>

<body>
<div class="f" onclick="st()">
    <div id="ball"  class="z"></div>
    <div id="ban" class="b" onkeydown="ar"></div>
</div>


</body>
<script>
//随机碰撞点
    // 生成0-1200随机整数
   let r=Math.floor(Math.random()*1200)
    //开始时刻小球球心着落随机点坐标(r,50)
    //球心坐标(x,y)
    //left+50=x,top+50=y
   let x=600,y=400
    //计算x与y运动距离倍数关系
    let x_y=(x-r)/(y-50)
    let dy=-1//表示单位时间沿y轴向上运动1
    let dx=x_y*dy//表示单位时间沿x轴位移
    //获取小球dom对象
    let ball=document.getElementById(`ball`)
    //点击父元素任意位置开始



//镜像反弹函数
    function  st(){
        let dsq=setInterval(()=>{
            //单位时间位移作用在坐标上
            x+=dx
            y+=dy
            //上下碰撞 y轴方向变化
            if(y<50){
                dy=-dy
            }
            if(y>=730){
                if(x>a&&x<a+400){
                    dy=-dy
                }else{
                    clearInterval(dsq)
                    alert('寄')
                }

            }
            /*if(zn(ball,ban)){
                dy=-dy
            }*/


            //左右碰撞 x轴方向变化
            if(x<=50||x>=1150)
                dx=-dx
            //坐标作用在实际定位上
            ball.style.left=x-50+`px`
            ball.style.top=y-50+`px`
        },10)

    }
   


//挡板移动
    let ban=document.getElementById(`ban`)
//挡板预设
    let a=0
    let da=20
    document.onkeydown=function ar(e){
        switch (e.keyCode){//多分支选择结构
            case 37:
                if (a<=0){
                    a=0
                }else {
                    a-=da
                }
                ban.style.left=a+`px`
                break;
            case 39:
                if (a>=800){
                    a=800
                }else {
                a+=da}
                ban.style.left=a+`px`
                break
        }
    }
</script>

</html>

 挡板运动(监听器实现)

挡板运动第二种方式
 //获取变量声明
let ban = document.getElementById('ban');
 let a = 0;

function handleKeyDown(e) {
// 监听键盘按下事件
      if (e.keyCode === 37) {
// 如果按下左箭头键
      if (a > 0) {
       a -= 10; // 控制每次移动的间距,你可以根据需要进行调整
   }
} else if (e.keyCode === 39) {
// 如果按下右箭头键
      if (a < 800) {
      a += 10; // 控制每次移动的间距,你可以根据需要进行调整
    }
      }
  
      ban.style.left = `${a}px`; // 更新元素的left属性值
   }
//添加一个事件监听器
     document.addEventListener('keydown', handleKeyDown);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值