JavaScript实现消灭星星游戏完整教程
本文通过一个消灭星星的完整案例,详细演示了JavaScript中DOM节点创建、删除与样式修改的具体用法。结合setTimeout与setInterval定时器,实现星星随机生成与点击消除功能。文章还梳理了结点操作、样式属性及定时器相关的核心API,适合初学者学习JS基础交互逻辑。
本文分享了一个使用JavaScript实现的消灭星星游戏完整代码示例,供读者参考学习。
以下是消灭星星功能的运行效果展示:

该案例主要包含以下功能需求:
1. 用户点击星星时,该星星消失。 2. 系统每隔一秒自动生成一颗新的星星。 3. 新生成星星的大小和出现位置均为随机值。
接下来对案例代码进行详细分析与讲解:
首先是HTML和CSS部分的代码实现:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div {
position: relative;
width: 1000px;
height: 500px;
margin: 100px auto;
background-color: black;
}
</style>
<body>
<div>
</div>
- 在body标签中,仅需放置一个div容器,用于承载随机生成的星星元素。
- 该div容器必须设置定位属性(如relative或absolute),因为星星的随机位置是通过设置其left和top值来实现的。
以下是JavaScript核心逻辑代码:
var div = document.querySelector('div');//获取到div盒子
function creatImg(num) {
for (var i = 0; i < num; i++) { //随机生成num个星星
var imgs = document.createElement('img'); //创建img标签
imgs.style.position = 'absolute'; //给星星图片添加绝对定位
var width = Math.floor(Math.random() * (50 - 10 + 1) + 10);
var height = width; //随机生成宽度和高度,星星的宽高一致
var top = Math.floor(Math.random() * (450 - 0 + 1) + 0);
var left = Math.floor(Math.random() * (950 - 0 + 1) + 0);
//将星星的宽、高、left、top值全部修改为随机生成的
imgs.style.width = width + 'px';
imgs.style.height = height + 'px';
imgs.style.left = left + 'px';
imgs.style.top = top + 'px';
//将星星图片的链接添加到img标签中
imgs.src = 'images/xingxing.gif';
//将创建的img标签添加到div盒子里面
div.appendChild(imgs);
}
}
注意:在通过JS修改width、left等带有单位的CSS属性时,必须显式添加单位,否则样式可能不生效。
creatImg(5); //调用函数并生成五颗星星
setInterval(function () { //每隔1s执行一次里面的代码
var img = document.querySelectorAll('img'); //获取到星星图片
//给每个星星添加点击事件
for (var i = 0; i < img.length; i++) {
img[i].addEventListener('click', function () {
//点击之后删除点击的img
div.removeChild(this);
})
}
creatImg(1);
}, 1000);
获取图片时,需要获取div容器内所有的星星图片元素,而非单独获取某一张。
获取到的图片集合以伪数组形式存在,因此可以使用遍历方式,为每个星星逐一绑定点击事件。
本案例涉及以下JavaScript知识点(文中高亮部分为实际使用到的内容):
结点操作
创建结点
document.createElement() document.createTextNode() document.createTextNode()
添加结点
node.appendCild(child)(追加元素) node.insertBefore(新的子元素, 要插入的位置元素)
删除结点
node.removeChild(child) 用于删除父元素中的一个子结点。
样式属性操作
element.style
1. element.style.backgroundColor = 'red'; 2. JS中的样式属性采用驼峰命名法。 3. 通过JS修改style样式会生成行内样式,其CSS权重较高。
element.className
1. 适用于样式较多或功能复杂的情况。 2. className会直接更改元素的类名,从而覆盖原先的类名。 3. 可以使用多类名选择器。
定时器
window.setTimeout(调用函数, [延迟的毫秒数]);
1. setTimeout()中的调用函数也称为回调函数(callback)。 2. window对象可以省略。 3. 调用函数可以直接写函数体、函数名,或采取字符串形式'函数名'。 4. 延迟的毫秒数省略时默认为0,单位必须是毫秒。 5. 若存在多个定时器,通常需给定时器赋值一个标识符以便管理。 6. setTimeout仅执行一次。
window.setInterval(调用函数, [延迟的毫秒数]);
1. setInterval()中的调用函数也称为回调函数(callback)。 2. window对象可以省略。 3. 调用函数可以直接写函数体、函数名,或采取字符串形式'函数名'。 4. 延迟的毫秒数省略时默认为0,单位必须是毫秒。 5. 若存在多个定时器,通常需给定时器赋值一个标识符以便管理。 6. setInterval会重复执行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
JS监听滚动事件:回到顶部按钮的显示与隐藏逻辑
2026-11-05 16:19:37
JavaScript怎么读写LocalStorage与SessionStorage
2026-11-05 15:40:11
anime.js 与 GSAP 对比:轻量级项目该怎么选择动画库
2026-11-05 11:24:55
flv.js 与 hls.js 在直播场景下的选型对比
2026-11-05 08:18:52
JavaScript能做什么?前端开发中的作用与应用场景解析
2026-11-04 23:17:54
