纯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自动换行的完整攻略。 1. 什么是自动换行 在CSS中,自动换行指的是当一行文本的长度超过了容器的宽度时,会自动将文字换到下一行显示。这需要设置一些样式来控制文本的布局,以便在窄屏幕上能够正常显示。 2. 实现CSS自动换行的代码 要实现CSS自动换行,可以使用下面的代码块: word-wrap: break-word; word-break…

    css 2023年6月10日
    00
  • DIV背景半透明文字不半透明的样式

    当需要在网页上实现背景半透明、且文字不半透明的效果时,一种解决方案是使用CSS3的RGBA色彩模式,将背景色中的alpha值(透明度)调整为小于1的值。 我们可以采用以下步骤来实现这个效果: 1. 创建HTML元素 首先需要在HTML中创建一个元素,并为其添加唯一的class或id属性,用于在CSS中引用。例如,我们创建了一个div元素,其class属性为“…

    css 2023年6月11日
    00
  • DIV+CSS 网页TIP的简单作法

    DIV+CSS 网页 TIP 的简单作法的攻略步骤如下: 步骤一:HTML结构 首先我们需要搭建一个基本的 HTML 结构。我们需要一个包含 TIP 内容的触发器和一个隐藏的 TIP 内容框。 HTML 结构示例如下: <div class="tip-trigger"> Trigger <div class="…

    css 2023年6月9日
    00
  • 深入浅析HTML5中的SVG

    深入浅析HTML5中的SVG 什么是SVG SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于 XML 的标记语言,用于描述二维的矢量图形。与位图不同,SVG 图形是矢量图形,它可以通过数学公式来描述图形中的各种元素,因此可以无损放大或缩小而不失真,这使得 SVG 成为制作图标、图表和动画等多媒体元素的理想选择。 SVG 的…

    css 2023年6月11日
    00
  • 浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势

    下面是详细的攻略: 什么是 Yii2 AssetBundle? Yii2 为我们提供了一个非常实用的 AssetBundle 类,用于管理资源文件,包括 CSS、JS、图片等文件,使得我们能够更好地组织资源文件,减少重复代码,提高代码可读性与可维护性。 为什么要使用 $publishOptions? 在 Yii2 中,我们可以通过以下方式来注册资源文件: $…

    css 2023年6月10日
    00
  • JavaWeb表单注册界面的实现方法

    让我来详细讲解一下“JavaWeb表单注册界面的实现方法”的完整攻略。 1. 概述 JavaWeb表单注册界面的实现方法主要包括以下几步: 设计前端页面,包括表单和提交按钮; 创建Java Servlet处理表单数据,将数据存储到数据库中; 创建数据库并设计用户表,用于存储注册用户的信息; 使用JDBC连接数据库,并编写Java代码实现数据的增删改查。 接下…

    css 2023年6月10日
    00
  • 动易CMS改变行距、字体大小、颜色

    以下是详细讲解“动易CMS改变行距、字体大小、颜色”的完整攻略: 改变行距 改变行距可以使文章排版更加美观和易读。在动易CMS中,可通过以下步骤改变行距: 进入文章的编辑界面,选中需要改变行距的文字。 在工具栏中点击“行间距”按钮,选择所需的行距大小即可。 示例说明: 假设你的文章中有一段需要加大行距的文字,你可以先选中这段文字,然后在工具栏中点击“行间距”…

    css 2023年6月9日
    00
  • js原生瀑布流插件制作

    下面我将详细讲解制作 JavaScript 原生瀑布流插件的攻略。 1. 瀑布流布局 瀑布流布局是一种常见的网页布局形式,它的主要特点是多列等宽的布局,每一列中的元素高度可以不同,元素按顺序从上到下排列。这种布局形式可以很好地展示图片、文章等内容。 实现瀑布流布局的方式有很多种,其中一种常见的方式是使用 JavaScript 代码动态计算元素的位置和大小。下…

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