javascript技巧——消灭星星

       在学习javascript的时候,学习的越多,我们就可以写出来更多有趣的东西。比如我所展示的消灭星星的案例,就是在学习DOM,BOM的内容之后,所写出来的案例。那么在这里,我就来介绍一下这个消灭星星的案例是怎么做出来的。

让我们来看看消灭的星星的案例是什么样的效果:

 

让我们观察这个消灭星星的案例,它在实现的时候,存在两个过程:

  1. 点击星星的时候,会消灭当前的点击对象,然后生成星星
  2. 所生成的星星是随机的大小,是随机的位置
  3. 每隔一段时间,页面中也会不断生成新的星星,而且位置和大小也是一样的随机

根据这些特点,我们分布来讲解每个阶段该怎么去实现。

 


 

一、构建黑夜中的星星

       当然我们需要做的事情其实最基础的地基,就是先把html结构搭建好,加上一些CSS的样式去完成这个效果,这里我展示一下我自己的代码给大家做案例,也可以用自己的想法来书写:

<style>
    * {
        margin: 0;
        padding: 0;
    }
    
    li {
        list-style: none;
    }
    
    body {
        background-color: #000;
    }
    
    ul li {
        position: absolute;
        top: 100px;
        left: 300px;
        width: 60px;
        height: 60px;
        background: url(img/xingxing.gif) no-repeat;
        background-size: contain;
        cursor: pointer;
    }
</style>

<body>
    <ul>
        <li></li>
    </ul>
</body>


二、消灭星星

      从我的案例,我们可以看出来,我想要制作的是生成的星星,装在ul里面,然后点击的星星,是用li生成。这样做,我们就可以使用一个好用的DOM事件方法:事件委托。通过事件代理,即使我们生成的星星不是原有的列表里面存在的,是从新生成的li,也可以实现刷新列表之后找到这个对象,利用冒泡的方式监听到新生成的li,实现可以指定我们需要的li的效果,并且消灭li。

       了解我们的原理和方法,我们首先要书写生成的星星的函数,规定三个随机数,第一个和第二个是当前的位置变化随机数,第三个则是星星大小比例的随机数。创造结点插入结点之后,我们就把这些变化添加给新生成的li里面。代码如下:

function Creat() {
        var r1 = Math.random(10);
        var r2 = Math.round(Math.random() * 600);
        var r3 = Math.round(Math.random() * 1400);
        var li = document.createElement('li');
        ul.appendChild(li, ul.children);
        li.style.top = r2 + 'px';
        li.style.left = r3 + 'px';
        li.style.width = r1 * li.clientWidth + 'px';
        li.style.height = r1 * li.clientHeight + 'px';
    }

       之后,我们就把函数放进事件委托里面,当我们的事件委托触发的时候,我们就移除当前点击的li,然后通过函数创造新的li,我们就完成了消灭星星的事件了。

ul.addEventListener('click', function(e) {
        Creat();
        ul.removeChild(e.target);
    });


三、持续生成星星

       原理就是把生成的调用函数装入定时器中,重复调用,然后设定一个关闭的条件就可以了,我这里设定的是ul的子节点的长度。用代码展示给大家看吧:

timer = setInterval(function() {
        Creat();
        if (ul.children.length > 20) {
            clearInterval(timer);
        }
    }, 1000);

       这样,消灭星星的案例就完成了。消灭星星的重要的地方是,搞清楚哪些功能要先做出来,然后再去处理。最后附上一个完整的代码给大家观看,方便大家检查代码的错误:

<style>
    * {
        margin: 0;
        padding: 0;
    }
    
    li {
        list-style: none;
    }
    
    body {
        background-color: #000;
    }
    
    ul li {
        position: absolute;
        top: 100px;
        left: 300px;
        width: 60px;
        height: 60px;
        background: url(img/xingxing.gif) no-repeat;
        background-size: contain;
        cursor: pointer;
    }
</style>

<body>
    <ul>
        <li></li>
    </ul>
</body>
<script>
    var ul = document.querySelector('ul');
    var timer = null;
    ul.addEventListener('click', function(e) {
        Creat();
        ul.removeChild(e.target);
    });
    timer = setInterval(function() {
        Creat();
        if (ul.children.length > 20) {
            clearInterval(timer);
        }
    }, 1000);


    function Creat() {
        var r1 = Math.random(10);
        var r2 = Math.round(Math.random() * 600);
        var r3 = Math.round(Math.random() * 1400);
        var li = document.createElement('li');
        ul.appendChild(li, ul.children);
        li.style.top = r2 + 'px';
        li.style.left = r3 + 'px';
        li.style.width = r1 * li.clientWidth + 'px';
        li.style.height = r1 * li.clientHeight + 'px';
    }
</script>

感谢大家的观看。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值