原生js实现打字动画游戏
发布时间 - 2026-01-10 22:51:22 点击率:次这是昨天用原生的js写的打字动画游戏,主要用的间歇定时器,对象,还有Math方法,感觉还行,主要看消除字母的时间快慢,但是也有bug,就是字母都是一次性生成的,所以一开始,看起来感觉会有种爆炸的感觉,如果能够一次性生成一批,然后分批往下掉就好了,求大神帮忙改改,大家也可以参考参考。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
body,button{
margin: 0;
padding: 0;
}
body {
background: #333;
}
#game {
width: 400px;
margin: 0 auto;
}
#start {
width: 80px;
height: 40px;
}
span {
margin: 20px;
color: white;
}
.letter {
position: absolute;
color: yellow;
font: bold 30px "Arial";
}
</style>
<script>
window.onload= function () {
var start = document.getElementById("start");
var scroll = document.getElementById("scroll");
var time = document.getElementById("time");
var g = 1 ;//Gravity
var timenum = 0 ;//时间的计数
var num = 0 ;//成绩的计数
var gameover = false ;
var timeandtime = null;
var letters = null ;
//字母放在一个字符串里面,随机选取
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//点击开始按钮,字母会自动生成,从顶部,以随机速度落下
//用户操作:按钮对应字母的按钮,然后字母就会消失
//用户没有点击到的按钮到达底部以后会回到顶上重新落下;
//用户清除所有字母后,弹出对话框,显示分数和文字。
//封装一个对象,里面包含获取事件对象,页面位置,清除冒泡,获取事件目标的兼容性方法
var eventUtil = {
getEvent: function (event) {
return event || window.event;
},
getPageX: function (event) {
return event.pageX || event.clientX + document.documentElement.scrollLeft;
},
getPageY: function (event) {
return event.pageY || event.clientY + document.documentElement.scrollTop;
},
stopPropagation: function (event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
},
getTarget: function (event) {
return event.target || event.srcElement;
}
};
start.onclick= function () {
for(var i = 0 ;i<26;i++){
new letter();
}
letters = document.body.children;//将页面中所有的div全部放入一个伪数组中,第一个除外,属于game,因此遍历从1开始
//在键盘上,按下对应的字母键,字母会立即消失,同时分数会增加,并且在上面重新生成;
document.onkeydown = function (event) {
var evt = eventUtil.getEvent(event);
var keychar = String.fromCharCode(evt.keyCode);//将按下的字母键盘码转换成直接的大写字母
for(var i = 1 ;i<letters.length;i++){
if(keychar===letters[i].innerHTML){
num++;
scroll.innerHTML = num;
document.body.removeChild(letters[i]);
}
}
}
timeandtime=setInterval(function () {
timenum = timenum + 1 ;
console.log(letters);
if(letters.length==1){//当伪数组的长度只有一个时,那么游戏就结束
gameover = true ;
clearInterval(timeandtime);
alert("用时"+timenum+"秒,再接再厉!突破10秒!");
} else {
time.innerHTML = timenum;
}
},1000)
}
//封装函数
function letter(){
this.x=Math.random()*900+100; //设置位置在100-1000之间
this.y=0;
this.speedY = Math.random()*4+1; //速度随机设置在1-5之间
this.value = str[parseInt(Math.random()*25)]; //在26个字母中随机生成一个字母
var letDiv = document.createElement("div");
letDiv.className = "letter";
letDiv.style.top = this.y+"px";
letDiv.style.left = this.x+ "px";
letDiv.innerHTML = this.value;
document.body.appendChild(letDiv);
//字母往下掉
var that = this ;
this.timer=setInterval(function () {
//leader = leader + step;
that.y = that.y + that.speedY;
if(that.y>=client().height-letDiv.offsetHeight){
that.y = 0;
that.x = Math.random()*900+100;
}
if(!gameover){
letDiv.style.left = that.x + "px";
letDiv.style.top = that.y + "px";
} else {
clearInterval(that.timer);
}
},15)
}
// 获取可视窗口的宽度和高度窗,兼容性问题
function client() {
return {
width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
};
}
}
</script>
</head>
<body>
<div id="game">
<button id="start">开始</button>
<span>得分:<i id="scroll">0</i></span>
<span>计时:<i id="time">0</i></span>
</div>
</body>
</html>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js打字游戏
# js实现打字效果
# 原生JS面向对象实现打字小游戏
# JS实现打字游戏
# js实现打字小游戏
# javascript实现简单打字游戏
# javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
# JavaScript打字小游戏代码
# javascript 打字游戏实现代码
# JavaScript实现气球打字的小游戏
# 按下
# 都是
# 这是
# 往下掉
# 就会
# 也有
# 放在
# 第一个
# 遍历
# 大神
# 弹出
# 只有一个
# 再接再厉
# 在上面
# 转换成
# 还行
# 对话框
# 以后会
# 自动生成
# 组中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
javascript日期怎么处理_如何格式化输出
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Linux系统命令中tree命令详解
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Python正则表达式进阶教程_复杂匹配与分组替换解析
JavaScript实现Fly Bird小游戏
js实现点击每个li节点,都弹出其文本值及修改
iOS验证手机号的正则表达式
EditPlus中的正则表达式 实战(2)
网站制作企业,网站的banner和导航栏是指什么?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Bootstrap整体框架之CSS12栅格系统
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
如何在建站主机中优化服务器配置?
如何在建站宝盒中设置产品搜索功能?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
HTML 中动态设置元素 name 属性的正确语法详解
如何获取PHP WAP自助建站系统源码?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何快速完成中国万网建站详细流程?
jquery插件bootstrapValidator表单验证详解
Android滚轮选择时间控件使用详解
linux top下的 minerd 木马清除方法
Laravel如何使用Blade组件和插槽?(Component代码示例)
网站制作大概多少钱一个,做一个平台网站大概多少钱?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何在橙子建站上传落地页?操作指南详解
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel如何使用Service Container和依赖注入?(代码示例)
浅述节点的创建及常见功能的实现
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何快速辨别茅台真假?关键步骤解析
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何自定义建站之星网站的导航菜单样式?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
音乐网站服务器如何优化API响应速度?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何快速查询域名建站关键信息?
如何实现javascript表单验证_正则表达式有哪些实用技巧

