[兔了个兔]——兔年元宵猜灯谜

1,413 阅读2分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

今日元宵佳节,有些地方在这天会有盛大的集会,举办猜灯谜活动。在外工作的我,不能感受猜灯谜的气氛,只能自己动手搞一个猜灯谜小游戏。

image.png 点击其中一个图片就会出现谜语。

image.png

实现

实现上述过程重点是点击图片后,图片消失,谜底出现。我们通过position让图片脱离文档流,让图片‘盖住’谜底,在点击的时候利用display让图片消失,谜底出现。

  • 布局。首先我们画出包裹灯谜的div,将其设置成flex弹性布局,将里面的三个div进行布局,并找到一种图片当做背景。
   .wrapper {
        width: 800px;
        height: 300px;
        display: flex;
        justify-content: space-around;
        align-items: center;
        background: gainsboro;
        background: url(./images/background.jpg);
        background-size: 100%;
      }
      .item {
        width: 180px;
        height: 220px;
        border: 1px solid red;
        box-shadow: 0 1px 20px red;
        display: flex;
        justify-content: center;
        align-items: center;
        position: relative;
      }
    <div class="wrapper">
      <div class="item">
        <img src="./images/lamp.jpg" alt="" />
        <span class="riddle">早说晚不说(打一字)</span>
      </div>
      <div class="item">
        <img src="./images/lamp.jpg" alt="" />
        <span class="riddle">超级好牙刷(打一成语)</span>
      </div>
      <div class="item">
        <img src="./images/lamp.jpg" alt="" />
        <span class="riddle">高台对映月分明(打一字)</span>
      </div>
    </div>

接下来就是对图片进行设置,通过position:absolute达到盖住谜底的效果,这时候一定要将父元素position设置为relative,不然图片会根据body进行定位。

   img {
        width: 100%;
        height: 100%;
        cursor: pointer;
        position: absolute;
      }
      .riddle {
        color: red;
        font-weight: bold;
      }

将谜底文字设置为红色加粗。

  • 事件。点击时候图片消失,那我们给图片添加点击事件,利用document.getElementsByTagName('img')获取图片dom元素集,然后循环添加点击事件,在点击图片时添加display:none。获取的dom集是伪数组,所以我们不能使用数组循环方法,比如forEach,用for进行循环添加。
    for (let i = 0; i < imgs.length; i++) {
        imgs[i].onclick = function () {
          imgs[i].style.display = 'none';
        };
      }

这样我们就得到了猜灯谜了小游戏啦。

总结

不知道上面三个灯谜,大家都猜出了嘛。新的一年,祝大家元宵快乐!