纯html+css实现打字效果

yizhihongxing

这里给出纯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日

相关文章

  • filter:drop-shadow有方向的阴影使用说明

    下面是关于“filter:drop-shadow有方向的阴影使用说明”的完整攻略。 什么是filter:drop-shadow? 首先,我们需要了解filter:drop-shadow属性。它是CSS3中的一个滤镜属性,可以给元素添加阴影效果。 语法如下: box-shadow: [inset] [horizontal-offset] [vertical-o…

    css 2023年6月11日
    00
  • Vue内置组件Teleport的使用

    当我们在开发Vue应用时,可能遇到需要将一个组件移动到DOM树的另一个位置的场景,这时候我们就可以使用Vue 3.0中新增的Teleport内置组件来实现。 Teleport组件 Vue 3.0中新增了Teleport组件,用来将一个组件的内容移动到指定的DOM元素处,从而解决了父组件限制了子组件的显示位置的问题。 基本用法 首先,在需要挪动的组件中,我们需…

    css 2023年6月10日
    00
  • CSS样式表的背景渲染效率

    CSS样式表的背景渲染效率是指浏览器渲染网页时,如何尽可能地减少对内存及其他计算机资源的使用,从而提高网页的加载速度及用户体验。以下是一些提高CSS样式表的背景渲染效率的攻略: 1. 尽可能使用CSS3的简写方式 使用CSS3的简写方式能够节省代码,减少文件大小,从而提高页面加载速度,同时也能更方便地进行代码编写和修改。例如: /* 按照传统方式编写的CSS…

    css 2023年6月9日
    00
  • ExtJS4 Grid改变单元格背景颜色及Column render学习

    下面我会详细讲解“ExtJS4 Grid改变单元格背景颜色及Column render学习”的攻略。 什么是ExtJS4 Grid? ExtJS4 Grid是一个基于JavaScript语言和HTML/CSS技术的高性能表格控件。它是一个面向企业级应用的表格控件,提供了丰富的表格功能和易于扩展的插件机制,适合用于数据呈现、数据分析和数据展示等场景。 改变单元…

    css 2023年6月9日
    00
  • CSS弹性布局FLEX,媒体查询及移动端点击事件的实现

    下面是详细讲解“CSS弹性布局FLEX,媒体查询及移动端点击事件的实现”的完整攻略。 CSS弹性布局FLEX CSS弹性布局FLEX是一种基于盒子模型的布局方式,它可以轻松地实现响应式设计。使用FLEX布局,我们可以灵活地控制容器中元素的排列方式,包括水平方向排列、垂直方向排列、换行等。 语法 使用FLEX布局,需要将容器的 display 属性设置为 fl…

    css 2023年6月10日
    00
  • CSS 中px、em、rem、%、vw、vh单位之间的区别详解

    下面是详细讲解“CSS 中px、em、rem、%、vw、vh单位之间的区别详解”: 基本介绍 在 CSS 中,有很多种单位,其中比较常见的有 px、em、rem、%、vw、vh 等。每种单位都有其独特的特点与用法,下面进行详细介绍。 px px 即“像素”,是绝对单位,表示网页中的绝对长度。px 单位的大小不会因为屏幕分辨率的差异而产生变化。通常在固定尺寸的…

    css 2023年6月9日
    00
  • CSS3实现类似翻书效果的过渡动画的示例代码

    实现类似翻书效果的过渡动画可以通过使用CSS3的transform属性和transition属性来实现。以下是示例代码的完整攻略。 1. 准备工作 在HTML中添加一个含有前后两个div元素的容器,其中一个div元素包含需要翻转的内容。代码如下: <div class="book"> <div class="p…

    css 2023年6月10日
    00
  • 详解html5页面 rem 布局适配方法

    下面是详解“详解HTML5页面rem布局适配方法”的完整攻略: 什么是rem布局 rem 是root em(根em)的缩写,指相对于 HTML 根元素的字体大小来计算其他元素大小的一种尺寸单位。在移动端开发中,rem 布局是一种常用的页面适配方案,其可以让页面元素在不同设备中具有类似的显示效果。 如何实现rem布局 第一步:设置 html 根元素的字体大小 …

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