JavaScript实现消灭星星游戏完整教程

作者:页面旅途时间:2026-10-24 18:53:53浏览:514

本文通过一个消灭星星的完整案例,详细演示了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会重复执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

作者最新文章