纯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日

相关文章

  • js判断移动端横竖屏视口检测实现的几种方法

    下面是关于 “js判断移动端横竖屏视口检测实现的几种方法” 的完整攻略: 方法一:通过window.orientation属性判断屏幕方向 我们可以通过 window.orientation 属性获取设备的方向,然后判断设备是否处于横屏或竖屏状态,以此来实现移动端横竖屏视口检测。 举个例子,我们可以这样编写代码: function checkOrientat…

    css 2023年6月9日
    00
  • 可以少写1000行代码的正则表达式

    当我们编写代码的时候,往往需要对字符串进行各种各样的处理和判断,例如去除空格、筛选有效数据、判断邮箱格式等等。这些操作在不用正则表达式的情况下,往往需要写很多的判断条件,代码量就会变得非常庞杂和难以维护。而正则表达式就可以通过一些简单的语法表达式完成这些复杂的操作,从而大大减少代码量,提高代码的可读性和可维护性。 以下是一些可以少写1000行代码的正则表达式…

    css 2023年6月9日
    00
  • 使用css实现任意大小、任意方向和任意角度的箭头示例

    在 CSS 中,我们可以使用伪元素和 transform 属性来创建任意大小、任意方向和任意角度的箭头。下面是一个完整攻略,包含了如何使用 CSS 实现任意大小、任意方向和任意角度的箭头的过程和两个示例说明。 使用 CSS 实现任意大小、任意方向和任意角度的箭头 我们可以使用伪元素和 transform 属性来创建任意大小、任意方向和任意角度的箭头。下面是一…

    css 2023年5月18日
    00
  • vue.js项目使用原生js实现移动端的轮播图

    下面是实现“vue.js项目使用原生js实现移动端的轮播图”的完整攻略: 准备工作 安装vue-cli 首先需要安装vue-cli,它是一款官方提供的vue.js脚手架工具。可以通过以下命令安装: npm install -g vue-cli 创建vue.js项目 创建vue.js项目的命令为: vue init webpack my-project 其中“…

    css 2023年6月10日
    00
  • js控制滚动条缓慢滚动到顶部实现代码

    实现网页滚动条缓慢滚动到顶部的效果,可以采用JavaScript来控制网页的滚动行为。以下是实现这个效果的完整攻略: 步骤一:创建HTML和CSS 首先,在HTML中创建一个按钮,用于触发滚动条滑动到顶部的事件: <button onclick="scrollToTop()">Back to Top</button&gt…

    css 2023年6月10日
    00
  • javascript判断移动端访问设备并解析对应CSS的方法

    以下是详细的JavaScript判断移动端访问设备并解析对应CSS的方法: 1.通过userAgent判断 我们可以通过用户代理(userAgent)字符串来判断设备类型,因为每个设备的userAgent都不同。例如,iPhone的userAgent是以“Mozilla/5.0 (iPhone”开头的字符串。所以我们可以通过判断userAgent的类型来确定…

    css 2023年6月10日
    00
  • 基于react项目打包css引用路径错误解决方案

    首先,我假定你正在透过Webpack打包React项目,并且有CSS文件需要用到。在Webpack中,我们可以使用CSS loader和style-loader来处理CSS文件。当正确地配置这些 loader 后,Webpack会将CSS文件与我们的React组件一起打包,并将CSS样式以内联方式存储在最终的bundle中。但是,在某些情况下,Webpack…

    css 2023年6月9日
    00
  • 了解了这些才能开始发挥jQuery的威力

    了解了这些才能开始发挥jQuery的威力 jQuery是一款非常流行的JavaScript库,它极大地简化了JavaScript的编写。如果您要开始使用jQuery,请确保您已经掌握以下几个主要概念。 选择器 选择器允许您选择页面上的一个或者多个元素。其中,大部分选择器都是基于CSS选择器的,因此如果您已经了解过CSS选择器,那么理解选择器的工作原理应该很容…

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