[兔了个兔]——兔年春联

364 阅读2分钟

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

新年总是少不了贴春联,春联寄托了人们对美好生活的意愿。今天我们也用css+js做一对春联出来,这个春联有一个特点——字是一个个渲染上去。

123.gif

实现

实现第一步就是先花页面,页面局部我们分为两步:

  • 左右对联。首先我们利用flex布局将左右对联画出来,准备好喜欢的图片当做背景图片,增加观赏性。
   .wrapper {
        width: 800px;
        height: 500px;
        display: flex;
        justify-content: space-around;
        align-items: center;
        background: gainsboro;
        background: url(./images/background.jpg);
        background-size: 100%;
      }
     <div class="wrapper">
      <div class="vertical left"></div>
      <div class="vertical right"></div>
    </div>
  • 对联文字。左右对联中的文字需要竖着展示,依旧设置flex弹性布局,设置flex-direction: column,让文字在纵轴上进行排列。注意,这个时候每个文字都需要用一个标签去包裹,后面动态渲染时我们会体现出来。
      .vertical {
        width: 120px;
        height: 450px;
        display: flex;
        justify-content: flex-start;
        flex-direction: column;
        align-items: center;
        background: url(./images/column.jpg) no-repeat;
        background-size: 120px 450px;
        box-sizing: border-box;
        padding-top: 80px;
      }

页面画好了,接下来实现文字动态渲染事件,这里我们采用innerHTML+setInterval方法实现。确定好要渲染的对联,声明一个定时器,声明一个str去拼接对联中的每一个字,利用substr方法去获取每一个字,每获取一次将对联容器中的innerHTML换一次。之所以用inerHTML就是我们上面提到的文字要用标签包裹,达到布局效果。

   const leftText = '卯时春入户';
      const rightText = '兔岁喜盈门';
      const leftEle = document.getElementsByClassName('left')[0];
      const rightEle = document.getElementsByClassName('right')[0];
      let i = 0;
      let str = '';
      function playVertical(text, ele) {
        const timer = setInterval(() => {
          if (i >= text.length) {
            clearInterval(timer);
            str = '';
            i = 0;
            return;
          }
          str += `<div class="text">${text.substr(i, 1)}</div>`;
          ele.innerHTML = str;
          i++;
        }, 1000);
      }
      playVertical(leftText, leftEle);

上面实现了左边的文字渲染,右边的渲染我们简单粗暴利用延时器去执行文字渲染函数,延迟秒数就是左边文字长度乘以1000。

     const rightTimer = setTimeout(() => {
        playVertical(rightText, rightEle);
        clearTimeout(rightTimer);
      }, leftText.length * 1000);

上述代码中定时器、延时器都用常量声明了一下,并在函数完成后清除了,因为它两是闭包,不能被垃圾回收机制回收,还是养成习惯,用完清除。

总结

以上就是利用css+js实现春联的全部过程。春联上的祝福送给大家,新的一年元气满满。