JavaScript实现飞机发射子弹详解(内含源码)

JavaScript实现飞机发射子弹

  • 前言
  • 实现过程
  • 源码展示
  • 源码讲解
    • HTML结构
    • CSS结构
    • js结构

前言

文本主要讲解如何利用JavaScript实现飞机发射子弹,实现过程以及源码讲解。实现效果图如下:
在这里插入图片描述

实现过程

  1. 首先,找到飞机和子弹的UI图,gif图最好,这里我用的是jpg图。

飞机:
飞机样式
子弹:
在这里插入图片描述

2.把这两个UI图放在代码文件夹中
3.创建初始子弹数和飞机的img,这里我创建的是十个子弹和一架飞机。
4.创建img的position定位确定飞机初始位置,以及子弹初始消失display:none。并对文字剩余子弹数使用position:fixed固定定位。
5.创建script文件,使用document.onkeydown按键监听事件对上下左右键进行监听。并通过控制飞机的offsetLeft和offsetTop也就是在页面中的位置属性,并通过空格键调用shoots发射子弹方法。
6.在shoots中使用for循环,for循环中调用每个子弹的id,并判断子弹display是否为none,如果为none则把它定义为block,并对接收的top和left参数,对当前idDOM元素的top和left进行参数赋值,最后用break;跳出循环。
7.用setInterval定时进行子弹的动画效果。

源码展示

 <!DOCTYPE html>
<html><head><meta charset="utf-8"><title>飞机发射子弹</title><style>body {background-color: #f5f5f5;}img {position: absolute;left:50%;bottom:0;transform: translate(-50%,0);}div {position: fixed;top: 0;left: 0;}</style></head><body><div>剩余子弹:<span id="bullets">10</span></div><img src="子弹.jpg" alt="" id="bullet1" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet2" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet3" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet4" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet5" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet6" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet7" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet8" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet9" style="display:none;width:10px;"><img src="子弹.jpg" alt="" id="bullet10" style="display:none;width:10px;"><img src="飞机.jpg" alt="" id="plane" style="width:100px;height:100px;"><script>let plane = document.getElementById('plane')document.onkeydown = function(e) {switch (e.keyCode) {case 37:plane.style.left = plane.offsetLeft - 10 + "px";break;case 38:plane.style.top = plane.offsetTop - 10 + "px";break;case 39:plane.style.left = plane.offsetLeft + 10 + "px";break;case 40:plane.style.top = plane.offsetTop + 10 + "px";break;case 32: //space空格键发射子弹shoots(plane.offsetTop, plane.offsetLeft);break;}}function shoots(top, left) {let bullet;for (let i = 1; i <= 10; i++) {bullet = document.getElementById(`bullet` + i)if (bullet.style.display == 'none') {bullet.style.display = 'block'bullet.style.top = top + 'px'bullet.style.left = left + 'px'break;}}}setInterval(function() {let bullet;let bulletnum=0;for (let i = 1; i <= 10; i++) {bullet = document.getElementById(`bullet` + i)bullet.style.top = bullet.offsetTop - 10 + "px";if (bullet.offsetTop < -7) {bullet.style.display = "none";}if(bullet.style.display=='none'){bulletnum++;}}document.getElementById('bullets').innerHTML=bulletnum;}, 15);</script></body>
</html>

源码讲解

HTML结构

div为剩余子弹数量。数字的span的id为bullets
前十个img为子弹。Id为bullet1-10.
最后一个img是飞机。id为plane

CSS结构

img:用abolute实现定位,并用top和left进行定位。
div:用fix实现固定定位。

js结构

定义块变量plane,把DOM中id为plane赋过去。
document.onkeydown键盘监听事件,对键盘进行监听,并且通过e.keyCode和switch语句是否为上下左右的keyCode,如果是则对offsetLeftoffsetTop进行±10操作,并且把值赋给absolute中的top和left。
然后如果是32也就是space空格则调用发射子弹方法shoots
shoots方法用for循环来调用每个子弹,并通过判断这些子弹是否为display:none,如果是则定义为block,且把参数top和left值赋值过去,也就是当前飞机的位置,然后用break退出循环。
最后用setInterval定时器,也是for循环每15毫秒则把top-10,直到top<-7则让该DOM元素的display为none。然后把所有获取到display为none的变成剩余子弹数量,并把变量用innerHTML赋值给bulletsDOM元素。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五个必知的速率限制策略,以最大化流量流动

速率限制是一种策略&#xff0c;我们在工作中常常使用&#xff0c;它定义了系统在设定的时间框架内可以处理的最大请求数量。 速率限制定义了系统在指定时间段内可以处理的最大请求数量。 Image.png 速率限制是一种策略&#xff0c;我们在工作中常常使用&#xff0c;它定义了…

html综合笔记:设计实验室主页

&#xff11; 主页来源及效果 Overview - Lab Website Template docs (gitbook.io) greenelab/lab-website-template: An easy-to-use, flexible website template for labs (github.com) 2 创建网页 3 主要的一些file 3.1 index.md 主页面 3.1.1 intro 3.1.2 highlight …

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语)

假设函数定义 假设函数&#xff0c;猜一个 x->y 的类型&#xff0c;比如 y ax b&#xff0c;随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1&#xff0c;来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…

《视觉SLAM十四讲》-- 回环检测

文章目录 10 回环检测10.1 概述10.1.1 回环检测的意义10.1.2 回环检测的方法10.1.3 准确率和召回率 10.2 词袋模型10.3 字典10.3.1 字典的结构10.3.2 实践&#xff1a;创建字典 10.4 相似度计算10.4.1 理论部分10.4.2 实践&#xff1a;相似度的计算 10.5 实验分析与评述 10 回环…

PCL 计算一条射线与一个三角形的交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里我们使用点向式分别表示一个射线与一个三角形,如下图所示: 其中,平面的法向量 N N N可以由三角形两条边的叉乘来计算,点R0到平面的法向距离

Linux(Ubuntu)安装JDK环境

系统环境 Ubuntu20.04 下载JDK压缩包 前往Oracle官网进行后续下载或单击下载JDK压缩包 下拉找到JDK8&#xff0c;在Linux板块下选择适配系统架构的压缩包文件(后缀为tar.gz)&#xff0c;系统架构可通过uname -m命令查看 安装JDK 安装环境通常放在/usr/local下&#xff0c;进入…

CBAM注意力机制(结构图加逐行代码注释讲解)

学CBAM前建议先学会SEnet&#xff08;因为本篇涉及SEnet的重合部分会略加带过&#xff09;->传送门 ⒈结构图 下面这个是自绘的&#xff0c;有些许草率。。。 因为CBAM机制是由通道和空间两部分组成的&#xff0c;所以有这两个模块&#xff08;左边是通道注意力机制&#…

论文阅读:JINA EMBEDDINGS: A Novel Set of High-Performance Sentence Embedding Models

Abstract JINA EMBEDINGS构成了一组高性能的句子嵌入模型&#xff0c;擅长将文本输入转换为数字表示&#xff0c;捕捉文本的语义。这些模型在密集检索和语义文本相似性等应用中表现出色。文章详细介绍了JINA EMBEDINGS的开发&#xff0c;从创建高质量的成对&#xff08;pairwi…

Java(二)(String的常见方法,ArrayList的常见方法)

String 创建string对象 package Helloworld;public class dome1 {public static void main(String[] args) {// 1.直接双引号得到字符串对象,封装字符串对象String name "lihao";System.out.println(name);// 2. new String 创建字符串对象,并调用构造器初始化字符…

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…

【汇编】处理字符问题

文章目录 前言一、处理字符问题1.1 汇编语言如何处理字符1.2 asciiascii码是什么&#xff1f;ascii码表是什么&#xff1f; 1.3 汇编语言字符示例代码 二、大小写转换2.1 问题&#xff1a;对datasg中的字符串2.2 逻辑与和逻辑或2.3 程序&#xff1a;解决大小写转换的问题一个新…