纯html+css实现打字效果

这里给出纯HTML+CSS实现打字效果的完整攻略。

步骤1:创建HTML结构

首先我们需要在HTML中创建打字效果所需的结构,一般情况下可以使用<div><span><p>等标签来实现。例如:

<div class="typing">
  <span>H</span>
  <span>e</span>
  <span>l</span>
  <span>l</span>
  <span>o</span>
</div>

上面的代码创建了一个<div>元素,并包含了5个<span>元素,每个<span>元素中包含一个字母,所以这个结构就是一个包含“Hello”这个单词的结构。

步骤2:写CSS样式

接下来,我们需要为这个结构添加样式,让它实现打字效果。首先,我们需要设置每个字母的样式,如下:

span {
  display: inline-block;
  opacity: 0;
  animation: typing 1s ease-in-out forwards;
}

上面的样式代码设置了每个字母的display属性为inline-block,以便字母在同一行显示。opacity属性设置为0,以便字母开始时不可见。另外,我们使用了CSS3动画typing,持续1秒,缓动效果是ease-in-out,并保持动画结束时的状态(forwards)。接下来我们还需要定义typing动画:

@keyframes typing {
  to {
    opacity: 1;
  }
}

除了动画本身,我们还需要设置@keyframes规则。这里我们使用了to关键字定义一个动画,当动画结束时,元素的opacity属性设置为1,以显示出元素。

现在,这个样式已经应用到了每个字母上,但这样,在页面加载时,所有字母都会立即显示,而我们需要一种逐字逐个地显示它们的方法。所以,我们需要等待前一个字母出现之后再显示下一个字母。这里可以使用animation-delay属性来实现。根据这种方式,每个字母的延迟时间都可以等于之前字母的延迟时间与动画持续时间之和。

.typing span:nth-child(1) {
  animation-delay: 0s;
}

.typing span:nth-child(2) {
  animation-delay: 1s;
}

.typing span:nth-child(3) {
  animation-delay: 2s;
}

.typing span:nth-child(4) {
  animation-delay: 3s;
}

.typing span:nth-child(5) {
  animation-delay: 4s;
}

上面的代码将每个<span>元素的animation-delay属性设置为前一个字母的延迟时间与动画持续时间之和。

示例1:实现一个逐字逐句显示的效果

我们可以在.typing元素中嵌套多个<p>元素,每个<p>元素表示一个完整的句子。我们可以通过在每个<p>元素中添加各自不同的data-text属性来控制它们的显示内容。并通过JS实现对不同<p>元素中的data-text属性的循环遍历,使字母逐字逐句地逐个显示出来。

HTML代码如下:

<div class="typing">
  <p data-text="Hello world!"></p>
  <p data-text="This is a test."></p>
  <p data-text="Can you see me?"></p>
</div>

CSS样式可以和上面的例子一样,这里不再给出。JS代码如下:

const elements = document.querySelectorAll('.typing p');
let index = 0;

function typingEffect() {
  let currentEl = elements[index];
  let text = currentEl.dataset.text;
  let currentText = '';

  let typing = setInterval(() => {
    currentText += text[currentText.length];
    currentEl.textContent = currentText;

    if (currentText.length === text.length) {
      clearInterval(typing);
      index++;

      if (index >= elements.length) {
        index = 0;
      }

      setTimeout(() => {
        currentEl.textContent = '';
        typingEffect();
      }, 1000);
    }
  }, 100);
}

typingEffect();

上面的JS代码定义了一个typingEffect函数,在函数内部定义一个currentEl变量用于指向当前正在显示的<p>元素,然后使用setInterval函数实现字母逐个显示出来的效果。在每个<p>元素的字母都显示完毕后,删除之前的文字,使用setTimeout函数延迟一秒钟,再次调用typingEffect函数来显示下一个<p>元素中的字母。

示例2:实现打字机效果

在示例1中,我们实现了逐字逐句逐个显示的效果,接下来我们将为了增加打字机的效果,逐步添加文字的效果。同样的,我们可以在.typing元素中嵌套<p>元素,并使用data-text属性来指定要逐步添加的文本。

HTML代码如下:

<div class="typing">
  <p data-text="Hello world! I'm typing...">
</div>

我们需要使用JS实现逐字逐步添加的效果,并使用CSS实现光标闪烁的效果。下面是CSS样式和JS代码:

.typing span.cursor {
  display: inline-block;
  margin-left: 5px;
  animation: blink 1s ease-in-out infinite;
}

@keyframes blink {
  0% {
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
const elements = document.querySelectorAll('.typing p');
let index = 0;

function typingEffect() {
  let currentEl = elements[index];
  let text = currentEl.dataset.text;
  let currentText = '';
  let typing = setInterval(() => {
    currentText += text[currentText.length];
    currentEl.textContent = currentText;

    if (currentText.length === text.length - 1) {
      clearInterval(typing);
      index++;

      if (index >= elements.length) {
        index = 0;
      }

      setTimeout(() => {
        currentEl.innerHTML = currentText + '<span class="cursor">|</span>';
        typingEffect();
      }, 2000);
    }
  }, 100);
}

typingEffect();

JS代码中与示例1相似,但添加了一个显示光标的代码。当一行文字被输出后,光标的显示效果会闪烁。当全部文字被输出后,我们将光标显示在文本后,等待2秒钟后再进行下一行文本的输出。

结束了,上面是纯HTML+CSS实现打字效果的详细攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯html+css实现打字效果 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 纯CSS定位的固定垂直居中浮动层代码,附经典解说 《详解定位与定位应用》

    《详解定位与定位应用》是一本经典的前端技术书籍,其中包含了许多关于定位与定位应用的知识。本文主要讲解该书中的一个例子,即“纯CSS定位的固定垂直居中浮动层代码”。 这个浮动层代码主要通过CSS样式实现,具体实现方法如下: HTML代码: <div class="wrapper"> <div class="box…

    css 2023年6月9日
    00
  • HTML中img标签只显示图片中心位置的方法(三种方法)

    下面我将详细讲解三种方法让HTML中的img标签只显示图片中心位置。 方法一:使用background-image 通过将图片作为 background-image 设置在 div 或者其他块元素上,然后设置 background-position 属性为 center,即可实现只显示图片中心位置。 示例代码: <div class="ima…

    css 2023年6月9日
    00
  • css3制作的背景渐变动画效果

    当下,Web前端开发越来越注重动效和视觉效果的呈现。Web动画背景渐变动画效果可以让网站看起来更加生动和有趣。本文将为你提供制作CSS3背景渐变动画的详细教程。 1. 背景渐变、过渡和动画 在开始具体讲解如何制作CSS3背景渐变动画效果之前,先给大家简单讲解CSS3中关于背景、过渡以及动画属性的概念: 背景属性: 在CSS3中,可以通过background属…

    css 2023年6月9日
    00
  • 纯CSS实现箭头、气泡让提示功能具有三角形图标

    下面是“纯CSS实现箭头、气泡让提示功能具有三角形图标”的完整攻略。 一、制作箭头 1.1 三角形箭头 要创建一个三角形,可以使用CSS的width和height属性,以及border属性。比如要创建一个向下的三角形,可以使用以下代码: .arrow-down { width: 0; height: 0; border-left: 5px solid tra…

    css 2023年6月10日
    00
  • alt属性和title属性

    我来详细讲解一下“alt属性和title属性”的完整攻略。 什么是alt属性和title属性? 在HTML中,图片是通过标签来插入的。其中,图片不能够像文字那样直接传达信息,所以需要使用alt属性和title属性来描述图片。通过这两种属性,用户可以更好的了解图片的内容,也可以帮助屏幕阅读器等工具更好的解读图片。 alt属性 alt属性是用于描述图片的,当图片…

    css 2023年6月10日
    00
  • 前端面试必备之CSS3的新特性

    我来讲解一下。 前端面试必备之CSS3的新特性 1. CSS3的属性选择器 在CSS3中,新增了一些属性选择器,让选择元素更加灵活方便。下面介绍两种常用的属性选择器: 1.1 属性存在选择器 语法:[attribute] 这个选择器可以匹配指定属性的元素。例如: input[type] 这段代码选择所有具有”type”属性的input元素。如果我们想匹配所有…

    css 2023年6月9日
    00
  • reset.css引入以及1px边框问题的解决方法

    下面我来详细讲解一下“reset.css引入以及1px边框问题的解决方法”的完整攻略。 什么是reset.css? reset.css指的是一个用于重置浏览器默认样式的样式表。浏览器在页面渲染时会默认给HTML标签和其他标签添加一些默认样式,如padding、margin、font-size等,这些样式在不同的浏览器上可能会不同。在编写网页时,我们希望网页设…

    css 2023年6月10日
    00
  • 浅析两列自适应布局的3种思路

    针对这个问题,我会按照以下结构将答案完整细致地回答出来: 问题背景介绍 解决问题的前提条件 进行两列自适应布局的3种思路的详细讲解 两条示例说明 总结、注意事项和扩展知识 接下来,我会分别回答每个问题,希望对你有所帮助。 1. 问题背景介绍 两列自适应布局指的是,页面中有两个并列的块级元素,每个块级元素占据页面的一半宽度,而且这两个块级元素的高度可以是自适应…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部