「青训营 X 码上掘金」制作一个筹集小伙伴的小游戏

105 阅读3分钟

当青训营遇上码上掘金

介绍

(相遇)据说世界上两个陌生人相遇且相识的概率是 0.0000005,筹集小伙伴,青训营来自中国五湖四海的同学,组成了各个小组,成为了一群小伙伴。在地图上将小伙伴都筹齐,最终获得奖励卡片!

在地图上点击一位小伙伴就会有一只小飞机飞到筹集相册里,顺利到达一位。 当小伙伴都筹齐了,就会获得卡片!目标完成!

实现

主要分三部分:

  1. 将人物按钮和飞机放在地图上指定的位置。将相册放满人物。
  2. 绑定点击事件,在点击人物按钮后,飞机移动到相册的位置后,相册出现对应的人物。
  3. 在相册里显示的人满了后,胜利的卡片出现!

素材放置

地图作为背景导入,而人物按钮则放入其中。通过绝对定位来放置人物按钮到指定的位置。

地图开启相对定位,因为绝对定位是根据相对块进行定位,而其子元素(人物)则开启绝对定位,并且配合调整偏移量(left和top)来调整位置。

#ln {
        position: absolute;
        left: 670px;
        top: 290px;
   }
   .sx {
        position: absolute;
        left: 530px;
        top: 350px;
   }
   .wh {
    position: absolute;
        left: 530px;
        top: 480px;
   }
   .cq {
        position: absolute;
        left: 470px;
        top: 500px;
   }
   .zj {
        position: absolute;
        left: 635px;
        top: 520px;
   }
   .jx {
        position: absolute;
        left: 580px;
        top: 540px;
   }
   .gd {
        position: absolute;
        left: 550px;
        top: 630px;
   }

而为了达到点击人物按钮后,相册里能出现对应的位置,比如点击第四个按钮,第四个人物出现,因此不能使用display属性隐藏起来,而是使用visibility: hidden;。因为display:none是元素真的消除该元素,而visibility: hidden则是视觉上隐藏起来。

绑定事件

给每个人物绑定上点击事件,并且在点击之后,将该元素移除,display:none

点击之后,让飞机执行动画,飞到指定位置,并且在飞到后,将动画清零,下一次点击再触发。

在飞机到达后,相册里人物出现,因此使用定时器,在动画时间结束后出现。

那么如果每一个都绑定太麻烦了,因此我设置了for循环,由于前八个li是这八个人物,因此for循环的范围为8。

let ln = document.getElementById("ln");
        let p1 = document.getElementById("p1");
        let target = document.getElementById("target");
        let map = document.getElementsByTagName('li');
        let allPerson = document.getElementsByTagName('h5');
        let final = document.getElementById("final");
        var num = 8;
        for(let i=0;i<=8;i++){
            let location = map[i];
            let person = allPerson[i];
            location.onclick = function(){
                location.style.display = "none";
                p1.style.animationName = "test";
                target.innerHTML = "x"+ (num-1);
                num--;
                
                setTimeout(function(){
                    p1.style.animationName = "";
                },2000)
                setTimeout(function(){
                    person.style.visibility = "visible";
                },2000)
            }
        }

最后,在相册里的人物筹集后,及时获取胜利卡片。 用一个变量来存储成功次数,当成功次数达到8次时,2.5s后出现(动画时间为2s)。

     var num = 8;
     if(num==0){
         setTimeout(function(){
             final.style.display = "block";
                 },2500)
         }

最终代码+码上掘金