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

news2024/11/18 12:28:20

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.coloradmin.cn/o/1226338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++虚函数(定义,作用,原理,案例)

一.定义&#xff1a; C的虚函数是在父类(基类)中声明的的函数&#xff0c;它可在子类(派生类)中重写。二.作用 虚函数的目的是实现多态性&#xff0c;即在程序运行时根据对象的实际类型确定调用哪个函数。三.使用方法&#xff1a; 在基类中声明虚函数时&#xff0c;需要在函…

全链路监控--pinpoint

一、pinpoint架构原理 架构组成 Pinpoint Agent:和自己运行的应用关联起来的探针 Pinpoint Collector:收集各种性能数据 Pinpoint-Web: 将收集到的数据显成为 WEB网页显示 HBase Storage: 存储收集到的数据 工作原理 pinpoint的核心思想是在各个服务节点之间彼此调用时&a…

【自然语言处理】【大模型】赋予大模型使用工具的能力:Toolformer与ART

赋予大模型使用工具的能力&#xff1a;Toolformer与ART ​ 本文介绍两种赋予大模型使用外部工具能力的方法&#xff1a;Toolformer和ART。 Toolformer论文地址&#xff1a;https://arxiv.org/pdf/2302.04761.pdf ART论文地址&#xff1a;https://arxiv.org/pdf/2303.09014.pd…

《视觉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 回环…

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 创建字符串对象,并调用构造器初始化字符…

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 …

庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现

文章目录 PreOverview状态变量概述Position 访问方法 Pre 庖丁解牛&#xff1a;NIO核心概念与机制详解 01 接下来我们来看下缓冲区内部细节 Overview 接下来将介绍 NIO 中两个重要的缓冲区组件&#xff1a;状态变量和访问方法 (accessor) 状态变量是"内部统计机制&quo…

【汇编】处理字符问题

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

我终于体会到了:代码竟然不可以运行,为什么呢?代码竟然可以运行,为什么呢?

废话不多说&#xff0c;直接上图 初看只当是段子&#xff0c;再看已是段中人 事情经过&#xff1a; 我在写动态顺序表的尾插函数时&#xff0c;写出了如下代码&#xff0c;可以跑&#xff0c;但是这段代码有一个bug暂时先不提 //动态顺序表的尾插 void SLPushBack(SL* psl, …

python中列表的基础解释

列表&#xff1a; 一种可以存放多种类型数据的数据结构 列表的创建&#xff1a; 1.用【】创建列表 #创建一个空列表 list1[] #创建一个非空列表 list2 [zhang,li,ying,1,2,3] #输出内容及类型 print(list1,type(list1)) print(list2,type(list2))结果&#xff1a; 2.使用list…

详细步骤记录:持续集成Jenkins自动化部署一个Maven项目

Jenkins自动化部署 提示&#xff1a;本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…

Linux中系统时间同步

在Windwos中&#xff0c;系统时间的设置很简单&#xff0c;界面操作&#xff0c;通俗易懂&#xff0c;而且设置后&#xff0c;重启&#xff0c;关机都没关系。系统时间会自动保存在BIOS时钟里面&#xff0c;启动计算机的时候&#xff0c;系统会自动在BIOS里面取硬件时间&#x…

开发知识点-uniapp微信小程序-开发指南

uniapp uni.chooseLocationgetCurrentPages美团外卖微信小程序开发uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并…

汇编-指针

一个变量如果包含的是另一个变量的地址&#xff0c; 则该变量就称为指针(pointer) 。指针是操作数组和数据结构的极好工具&#xff0c;因为它包含的地址在运行时是可以修改的。 .data arrayB byte 10h, 20h, 30h, 40h ptrB dword arrayB ptrB1 dword OFFSET arrayBarray…

4.6每日一题(多元函数的隐函数求导)

三元方程确定的二元函数类型的隐函数 方法一&#xff1a;两边对x求偏导&#xff0c;把y看成常数 注&#xff1a;z可以把x和y同时代入求出答案 方法二&#xff1a;带公式

数据结构【DS】栈

共享栈 共享栈的目的是什么&#xff1f; 目的:有效利用存储空间。 共享栈的存取数据时间复杂度为&#xff1f; 存取数据时间复杂度为O(1) 共享栈如何判空&#xff1f;如何判满&#xff1f; 两个栈的栈顶指针都指向栈顶元素&#xff0c;&#x1d461;&#x1d45c;&#x1d45d;…

【0基础学Java第十课】-- 认识String类

10. 认识String类 10.1 String类的重要性10.2 常用方法10.2.1 字符串构造10.2.2 String对象的比较10.2.3 字符串查找10.2.4 转化10.2.5 字符串替换10.2.6 字符串拆分10.2.7 字符串截取10.2.8 字符串的不可变性10.2.9 字符串修改 10.3 StringBuilder和StringBuffer10.3.1 String…

Java 11及更高版本的Oracle JDK版本

2021 年 9 月 14 日&#xff0c;Oracle 发布了可以长期支持的 JDK17 版本&#xff0c;那么从 JDK11 到 JDK17&#xff0c;到底带来了哪些特性呢&#xff1f;亚毫秒级的 ZGC 效果到底怎么样呢&#xff1f;值得我们升级吗&#xff1f;而且升级过程会遇到哪些问题呢&#xff1f;带…

PHP字符串函数的解析

在PHP中&#xff0c;字符串是一种常见的数据类型&#xff0c;用于存储和操作文本数据。PHP提供了丰富的字符串函数&#xff0c;用于执行各种字符串操作&#xff0c;包括截取、连接、替换、搜索等。在这篇文章中&#xff0c;我们将深入解析一些常用的PHP字符串函数&#xff0c;以…