码上掘金 | 简单实现一个打字机动画

1,378 阅读2分钟

我正在参加 码上掘金体验活动,详情:show出你的创意代码块

前言

众所周知,掘金是一个技()术()社区,我一直在沸点快乐的学()习(),那么作为一个合格的沸人。不仅要掌握熟练的学()习()技术,掌握打字技术使我们必备技能之一。

所以,下面就让我们简单实现一个打字机来帮我们打字摸鱼吧

代码块

code.juejin.cn/pen/7092220…

实现过程

预先准备

文字

然后打字机肯定是需要打字的,所以我们先来设定一下我们需要打的字

我们定义一个 text 文本

<body>
<div class="typewriter-effect">
  <div class="text" id="typewriter-text">
  </div>
</div>
</body>

然后使用 js 来设置 text 内部的文本元素

const typeWriter = document.getElementById('typewriter-text');
const text = 'I love mofish in Juejin .';

typeWriter.innerHTML = text;
typeWriter.style.setProperty('--characters', text.length);

--characters 为包含字符数的变量,用于文本的动画设置。

动画

打字机的动画其实分为两个部分

  • 出现的动画
  • 插入符 出现的动画

所以我们定义两个动画效果

  • typing 字体出现动画
@keyframes typing {
  75%,
  100% {
    max-width: calc(var(--characters) * 1ch);
  }
}
  • blink 插入符动画
@keyframes blink {
  0%,
  75%,
  100% {
    opacity: 1;
  }
  25% {
    opacity: 0;
  }
}

实现动画

文本动画实现

首先我们先只让文本实现一个依次出现的动画效果

.typewriter-effect > .text {
  max-width: 0;
  animation: typing 3s steps(var(--characters)) infinite;
  white-space: nowrap;
  overflow: hidden;
}

我们对文本添加动画,并根据需要使用white-space: nowrapoverflow: hidden使内容不可见

效果:

打字机1.gif

加入插入符动画 实现一个类似打字的效果

我们使用:after伪元素将插入符号添加到容器元素

.typewriter-effect:after {
  content: " |";
  animation: blink 1s infinite;
  animation-timing-function: step-end;
}

在文本动画的每次字体动画后 加入这个插入符的动画,就最终得到了我们需要的效果

打字机.gif

结语

这是由一个非常非常不专业的后端混子完成的,仅供大家一乐~

希望大家都可以在掘金快乐的学习(摸鱼)~~