js案例:小球碰壁反弹

目录

一.效果预览图​编辑

 解析

二.完整代码 

代码讲解

html部分

js部分


一.效果预览图

 解析

   这个效果是为了以后(过段时间会发的一个小游戏)做js小游戏做准备的,基本结构是,定义两个div盒子,小盒子设置成圆球形状,使其在大盒子中运动且不会跑到盒子外面去。

二.完整代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小球碰撞</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #wp{
            width: 600px;
            height: 400px;
            background: pink;
            margin: 50px auto;
            position: relative;
        }
        #xq{
            width: 40px;
            height: 40px;
            background-color: rgb(35, 202, 214);
            border-radius: 50%;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div id="wp">
        <div id="xq"></div>
    </div>
</body>
</html>
<script>
  let xq = document.getElementById('xq')
  //设置水平方向的初始值
  let l = 0;
  //设置水平方向的增量
  let lz = 1
  //设置垂直方向的初始值
  let t = 0;
  //设置垂直方向的增量
  let tz = 1;
  //设置计时器名称
  let timmer;

  //设置计时器
  timmer = setInterval(function(){
    //水平方向移动
    l+=lz
    //垂直方向移动
    t+=tz
    //把运动值赋给xq盒子
    xq.style.left = `${l}px`
    xq.style.top = `${t}px`
    //if判断盒子位置,当xp移动到外面大盒子边缘时,使其想想法方向移动
    if (l>=560) {
        //当小盒子的移动距离大于等于大盒子的宽度时,使其转换方向
        lz = -1;
    }
    if (l<=0) {
        lz = 1
    }
    if (t>=360) {
        tz = -1
    }
    if (t<=0) {
        tz = 1
    }
  },10)

</script>

代码讲解

html部分

<!DOCTYPE html>
<html>
<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #wp {
            width: 600px;
            height: 400px;
            background: pink;
            margin: 50px auto;
            position: relative;
        }
        #xq {
            width: 40px;
            height: 40px;
            background-color: rgb(35, 202, 214);
            border-radius: 50%;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div id="wp">
        <div id="xq"></div>
    </div>
</body>
</html>

这部分是HTML和CSS代码,用于定义页面结构和样式。以下是逐行解释:

  1. <!DOCTYPE html>: 这是HTML文档类型的声明,指定了文档类型为HTML。
  2. <html>: HTML文档的根元素。
  3. <head>: 包含了文档的元数据和引用的外部资源。
  4. <style>: 定义了内部样式表,用于设置页面元素的样式。
  5. *: 通配符选择器,表示匹配所有元素。
  6. margin: 0; padding: 0;: 将所有元素的外边距和内边距设置为0,去除默认样式的边距和内边距。
  7. #wp: ID选择器,选中ID为"wp"的元素。
  8. width: 600px; height: 400px;: 设置宽度为600像素,高度为400像素。
  9. background: pink;: 设置背景颜色为粉色。
  10. margin: 50px auto;: 设置元素的外边距为50像素,并水平居中对齐。
  11. position: relative;: 设置元素的定位方式为相对定位。
  12. #xq: ID选择器,选中ID为"xq"的元素。
  13. width: 40px; height: 40px;: 设置宽度为40像素,高度为40像素。
  14. background-color: rgb(35, 202, 214);: 设置背景颜色为RGB值(35, 202, 214),即青色。
  15. border-radius: 50%;: 设置圆角边框半径为50%,使元素呈现圆形。
  16. position: absolute;: 设置元素的定位方式为绝对定位。
  17. top: 0; left: 0;: 将元素定位在父元素的左上角。
  18. 以上代码定义了一个矩形框(ID为"wp")和一个圆形小球(ID为"xq"),并设置了它们的样式。

js部分

<script>
  let xq = document.getElementById('xq')
  //设置水平方向的初始值
  let l = 0;
  //设置水平方向的增量
  let lz = 1
  //设置垂直方向的初始值
  let t = 0;
  //设置垂直方向的增量
  let tz = 1;
  //设置计时器名称
  let timmer;

  //设置计时器
  timmer = setInterval(function(){
    //水平方向移动
    l+=lz
    //垂直方向移动
    t+=tz
    //把运动值赋给xq盒子
    xq.style.left = `${l}px`
    xq.style.top = `${t}px`
    //if判断盒子位置,当xp移动到外面大盒子边缘时,使其想想法方向移动
    if (l>=560) {
        //当小盒子的移动距离大于等于大盒子的宽度时,使其转换方向
        lz = -1;
    }
    if (l<=0) {
        lz = 1
    }
    if (t>=360) {
        tz = -1
    }
    if (t<=0) {
        tz = 1
    }
  },10)

</script>

这部分是JavaScript代码,实现了小球在矩形框内自动来回移动的效果。以下是逐行解释:

  1. let xq = document.getElementById('xq'): 使用 document.getElementById 方法获取ID为"xq"的元素,并将其赋值给变量xq
  2. let l = 0;: 设置水平方向的初始位置为0。
  3. let lz = 1;: 设置水平方向的增量为1,表示初始方向向右移动。
  4. let t = 0;: 设置垂直方向的初始位置为0。
  5. let tz = 1;: 设置垂直方向的增量为1,表示初始方向向下移动。
  6. let timmer;: 声明一个变量timmer,用于存储计时器的标识。
  7. timmer = setInterval(function(){...}, 10): 使用 setInterval 函数创建一个计时器,每隔10毫秒执行一次回调函数。
  8. 回调函数内部逻辑:
    • l += lz;: 更新水平方向的位置,根据增量调整位置。
    • t += tz;: 更新垂直方向的位置,根据增量调整位置。
    • xq.style.left = ${l}px;: 将水平方向的位置应用到小球元素的left样式属性上。
    • xq.style.top = ${t}px;: 将垂直方向的位置应用到小球元素的top样式属性上。
    • if语句块:
      • 当小球移动到大盒子的右边缘时(位置大于等于560),将水平方向的增量设置为-1,使小球向左移动。
      • 当小球移动到大盒子的左边缘时(位置小于等于0),将水平方向的增量设置为1,使小球向右移动。
      • 当小球移动到大盒子的底部边缘时(位置大于等于360),将垂直方向的增量设置为-1,使小球向上移动。
      • 当小球移动到大盒子的顶部边缘时(位置小于等于0),将垂直方向的增量设置为1,使小球向下移动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/86693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码pytorch-adda-master跑通记录

前言 最近在学习迁移学习&#xff0c;ADDA算法&#xff0c;由于嫌自己写麻烦&#xff0c;准备先跑通别人的代码。 代码名称&#xff1a;pytorch-adda-master 博客&#xff1a;https://www.cnblogs.com/BlairGrowing/p/17020378.html github地址&#xff1a;https://github.com…

关于Springboot项目打包的配置问题

一、打包方式的不同致使jar包运行性能及docker部署的效率问题 1.1方式一 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source&…

Flash 空间大小的选择以及8MB和8M bit单位与转换关系

他V hezkz17进数字音频系统研究开发交流答疑群(课题组) log打印 [09:54:27.565] FLASH_SIZE0x800000 这个是 8MB 字节 芯片手册Flash是以字节为单位 注意单位与转换关系 ifeq ($(FLASH_SIZE),0x100000) # 8M bits LOG_DUMP_SECTION_SIZE ? 0x10000 endif 0x1000001MB为 …

C# 观察者模式

一、概述 观察者模式是一种常用的设计模式&#xff0c;它属于行为型模式。在C#中&#xff0c;观察者模式通过定义一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现松耦合&#xff0c;…

精密图纸被窃,知名手表品牌Seiko遭BlackCat勒索软件攻击

据BleepingComputer消息&#xff0c;日本著名手表制造商Seiko在7月末遭到了网络攻击&#xff0c;8月21日&#xff0c;BlackCat&#xff08;又名ALPHV&#xff09;勒索软件组织在其网站上宣布对这起攻击事件负责。 8 月 10 日&#xff0c;Seiko发布了一份数据泄露通知&#xff0…

机器学习---常见的距离公式(欧氏距离、曼哈顿距离、标准化欧式距离、余弦距离、杰卡德距离、马氏距离、切比雪夫距离、闵可夫斯基距离、K-L散度)

1. 欧氏距离 欧几里得度量&#xff08;euclidean metric&#xff09;&#xff08;也称欧氏距离&#xff09;是一个通常采用的距离定义&#xff0c;指在m维空 间中两个点之间的真实距离&#xff0c;或者向量的自然长度&#xff08;即该点到原点的距离&#xff09;。在二维和三维…

【雷达】接收和去噪L波段雷达接收到的信号研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

单链表的多语言表达:C++、Java、Python、Go、Rust

单链表 是一种链式数据结构&#xff0c;由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据&#xff0c;只用于表示链表的开始位置。 单链表的主要操作包括&#xff1a; 添加元素&#xff1a;在链表的头部添加新…

采用typescript编写,实现ofd前端预览、验章

前言 浏览器内核已支持pdf文件的渲染&#xff0c;这极大的方便了pdf文件的阅读和推广。ofd文件作为国产板式标准&#xff0c;急需一套在浏览器中渲染方案。 本人研究ofd多年&#xff0c;分别采用qt、c# 开发了ofd阅读器。本人非前端开发人员&#xff0c;对js、typescript并不熟…

工程管理与工作流

1 统一开发环境/ 协作工具 你知道开发环境指的是什么吗&#xff1f; 开发环境&#xff1a; 工程运行环境、开发工具/ 编辑器 、开发依赖环境、 配置文件 软件环境&#xff1a; “仿真预演”环境 Staging 生产环境前最终验证、 这一环境尽可能的仿真了真实的生产环境 、另一个…

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam

&#x1f600;前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c…

网络编程——网络基础知识

目录 一、网络历史两个重要名词1.1 阿帕网1.2 TCP/IP协议 二、局域网和广域网三、IP地址3.1 基本概念3.2 划分(IPV4)3.3 特殊IP地址3.4 子网掩码3.5 重新组网 四、网络模型4.1 网络的体系结构&#xff1a;4.2 OSI与TCP/IP模型4.2.1 OSI模型4.2.2 TCP/IP模型4.2.3 OSI和TCP/IP模…

CNN之图像识别

什么是图像识别 • 图像识别技术是信息时代的一门重要的技术&#xff0c;其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展&#xff0c;人类对图像识别技术的认识越来越深刻 • 图像识别技术的定义为利用计算机对图像进行处理、分析和理解&…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

构建系统自动化-autoreconf

autoreconf简介 autoreconf是一个GNU Autotools工具集中的一个命令&#xff0c;用于自动重新生成构建系统的配置脚本和相关文件。 Autotools是一组用于自动化构建系统的工具&#xff0c;包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目&#xff0c;以便在不同…

[C语言]分支与循环

导言&#xff1a; 在人生中我们总会有选择&#xff0c;**如下一顿吃啥&#xff1f;**又或者每天都是在重复&#xff0c;吃饭&#xff01;&#xff01;&#xff01;&#xff01;&#xff0c;当然在C语言中也有选择和重复那就是分支语句与循环语句 文章目录 分支循环循环中的关键…

手写代码-前端面试

GitHub&#xff1a;手写代码集合

大数据-玩转数据-Flink营销对账

一、说明 在电商网站中&#xff0c;订单的支付作为直接与营销收入挂钩的一环&#xff0c;在业务流程中非常重要。对于订单而言&#xff0c;为了正确控制业务流程&#xff0c;也为了增加用户的支付意愿&#xff0c;网站一般会设置一个支付失效时间&#xff0c;超过一段时间不支…

一云多芯,智能化转型的下一个工程化挑战

进入2023年&#xff0c;产业数字化和智能化转型升级进入了大规模工程化落地阶段。根据中国信通院《中国数字经济发展研究报告&#xff08;2023&#xff09;》&#xff0c;数字经济已经占我国GDP比重达到41.5%&#xff0c;相当于第二产业占国民经济的比重。随着产业数字化和智能…

【数据结构】 LinkedList的模拟实现与使用

文章目录 &#x1f340;什么是LinkedList&#x1f334;LinkedList的模拟实现&#x1f6a9;创建双链表&#x1f6a9;头插法&#x1f6a9;尾插法&#x1f6a9;任意位置插入&#x1f6a9;查找关键字&#x1f6a9;链表长度&#x1f6a9;打印链表&#x1f6a9;删除第一次出现关键字为…