记录--20行js就能实现逐字显示效果???-打字机效果

这篇具有很好参考价值的文章主要介绍了记录--20行js就能实现逐字显示效果???-打字机效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--20行js就能实现逐字显示效果???-打字机效果

效果演示

横版

记录--20行js就能实现逐字显示效果???-打字机效果

竖版

记录--20行js就能实现逐字显示效果???-打字机效果

思路分析

  1. 可以看到文字是一段一段的并且独占一行,使用段落标签p表示一行
  2. 一段文字内,字是一个一个显示的,所以这里每一个字都用一个span标签装起来
  3. 每一个字都是从透明到不透明的过渡效果,使用css3的过渡属性transition让每个字都从透明过渡到不透明

基本结构

HTML基本结构

<div id="container"></div>

这里只需要一个容器,其他的结构通过js动态生成

CSS

#container {
  /* 添加这行样式=>文字纵向从右往左显示 */
  /* 目前先不设置,后面可以取消注释 */
  /* writing-mode: vertical-rl; */
}
#container span {
  /* 这里opacity先设置为1,让其不透明,可以看到每一步的效果 */
  /* 写完js之后到回来改为0 */
  opacity: 1;
  transition: opacity 0.5s;
}

文本数据

const data = ['清明时节闹坤坤,', '路上行人梳中分;', '借问荔枝何处有,', '苏珊遥指蔡徐村。']

使用数组存放文本数据,一个元素代表一段文字

创建p标签

使用for/of循环遍历数组创建对应个数的p标签,添加到html页面中

const data = ['清明时节闹坤坤,', '路上行人梳中分;', '借问荔枝何处有,', '苏珊遥指蔡徐村。']
// 获取dom元素
const container = document.querySelector('#container')
// for/of循环遍历数组
for (const item of data) {
  // 打印每一个item => 数组的每一个元素
  console.log(item)
  // 创建p标签
  const p = document.createElement('p')
  // 将p标签插入到container
  container.append(p)
}

item代表数组的每一个元素,也就是每一段文字,所以会创建4个p标签

记录--20行js就能实现逐字显示效果???-打字机效果

记录--20行js就能实现逐字显示效果???-打字机效果

与数组元素数量对应的p标签就生成好了

接下来就是将每一个元素里面的文本添加到span标签中

创建span标签

为每一个字创建一个span标签,然后让span标签的内容等于对应的字,再将每一个生成的span插入到p标签

本节代码

// 遍历item的每一个字
for (let i = 0; i < item.length; i++) {
  // 创建span
  let span = document.createElement('span')
  // span的内容等于item的每一个字
  span.innerHTML = item[i]
  // 将span插入到p标签中
  p.append(span)
}

合并后代码

const data = ['清明时节闹坤坤,', '路上行人梳中分;', '借问荔枝何处有,', '苏珊遥指蔡徐村。']
// 获取dom元素
const container = document.querySelector('#container')
// for/of循环遍历数组
for (const item of data) {
  // 打印每一个item => 数组的每一个元素
  console.log(item)
  // 创建p标签
  const p = document.createElement('p')
  // 遍历item的每一个字
  for (let i = 0; i < item.length; i++) {
    // 创建span
    let span = document.createElement('span')
    // span的内容等于item的每一个字
    span.innerHTML = item[i]
    // 将span插入到p标签中
    p.append(span)
  }
  // 将p标签插入到container
  container.append(p)
}

记录--20行js就能实现逐字显示效果???-打字机效果

此时已经完成了渲染数组,并将数组的每一个元素的文字渲染到单独的span中

接下来就要让每一个文字做到从看不见到看的见的效果

添加透明度过渡效果

将css样式中的opacity由1改为0

因为每个字的出现时间不一样,所以不能直接在循环的时候直接添加过渡效果,添加以下代码,让span标签在添加到p标签前也添加到新数组中

const arr = []
// 将span也添加到新数组中
arr.push(span)
最后遍历arr数组,为每一个元素添加一个过渡延迟效果
// 延时1毫秒等待上方循环渲染完成
setTimeout(() => {
  // 遍历arr数组的每一个元素
  arr.forEach((item, index) => {
    // 给每一个元素添加过渡延迟属性
    item.style.transitionDelay = `${index * 0.2}s`
    // 将透明度设置为不透明
    item.style.opacity = 1
  })
}, 1)

最后的最后将css样式中的opacity改为0,让所有的字透明

#container span {
  opacity: 0;
  transition: opacity 0.5s;
}

完整js代码

const data = ['清明时节闹坤坤,', '路上行人梳中分;', '借问荔枝何处有,', '苏珊遥指蔡徐村。']
const arr = []
// 获取dom元素
const container = document.querySelector('#container')
// for/of循环遍历数组
for (const item of data) {
  // 打印每一个item => 数组的每一个元素
  console.log(item)
  // 创建p标签
  const p = document.createElement('p')
  // 遍历item的每一个字
  for (let i = 0; i < item.length; i++) {
    // 创建span
    let span = document.createElement('span')
    // span的内容等于item的每一个字
    span.innerHTML = item[i]
    // 将span插入到p标签中
    p.append(span)
    // 将span也添加到新数组中
    arr.push(span)
  }
  // 将p标签插入到container
  container.append(p)
}
// 延时1毫秒等待上方循环渲染完成
setTimeout(() => {
  // 遍历arr数组的每一个元素
  arr.forEach((item, index) => {
    // 给每一个元素添加过渡延迟属性
    // 让每一个字都比前一个字延时0.2秒的时间
    item.style.transitionDelay = `${index * 0.2}s`
    // 将透明度设置为不透明
    item.style.opacity = 1
  })
}, 1)

至此,已经完成了逐字显示的效果,最后介绍一个css属性

writing-mode

使用这个属性可以改变文字方向,实现纵向从左往右或从右往左显示

以下摘自mdn文档

writing-mode 属性定义了文本水平或垂直排布以及在块级元素中文本的行进方向。为整个文档设置该属性时,应在根元素上设置它(对于 HTML 文档,应该在 html 元素上设置)

horizontal-tb
对于左对齐(ltr)文本,内容从左到右水平流动。对于右对齐(rtl)文本,内容从右到左水平流动。下一水平行位于上一行下方。
vertical-rl

对于左对齐(ltr)文本,内容从上到下垂直流动,下一垂直行位于上一行左侧。对于右对齐(rtl)文本,内容从下到上垂直流动,下一垂直行位于上一行右侧。

vertical-lr

对于左对齐(ltr)文本,内容从上到下垂直流动,下一垂直行位于上一行右侧。对于右对齐(rtl)文本,内容从下到上垂直流动,下一垂直行位于上一行左侧。

本文转载于:

https://juejin.cn/post/7271165389692960828

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--20行js就能实现逐字显示效果???-打字机效果文章来源地址https://www.toymoban.com/news/detail-739667.html

到了这里,关于记录--20行js就能实现逐字显示效果???-打字机效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大模型问答助手前端实现打字机效果

    随着现代技术的快速发展,即时交互变得越来越重要。用户不仅希望获取信息,而且希望以更直观和实时的方式体验它。这在聊天应用程序和其他实时通信工具中尤为明显,用户习惯看到对方正在输入的提示。 ChatGPT,作为 OpenAI 的代表性产品之一,不仅为用户提供了强大的自

    2024年02月08日
    浏览(27)
  • vue3 实现 chatgpt 的打字机效果

    在做 chatgpt 镜像站的时候,发现有些镜像站是没做打字机的光标效果的,就只是文字输出,是他们不想做吗?反正我想做。于是我仔细研究了一下,实现了打字机效果加光标的效果,现在分享一下我的解决方案以及效果图 首先要明确一点,chatgpt 返回的文本格式是 markdown 的,

    2024年02月05日
    浏览(36)
  • 前端发送Fetch请求实现流式请求、模拟打字机效果等

    前端需要接收后端的流式返回数据,并实时渲染。 普通的xhr请求都是等http协议数据包一次性返回之后才渲染,类似于ChatGPT的Http接口内容类型为text/event-stream。这种内容类型需要与浏览器建立持久连接并持续监听服务器返回的数据。 npm 方式安装类库 使用 调用 fetchEventSource

    2024年02月13日
    浏览(29)
  • Unity Text文本实现打字机(一个一个出来)的效果

    Unity Text文本要实现打字机,即一个个文字出来的效果,可以通过代码把text文本字符串拆成一个个字符然后添加到文本中。 具体实现: 新建一个控制脚本:TypewriteController.cs,并编写以下代码: 此控制脚本先把脚本文本获取后赋给一个字符串变量,然后置空文本内容,再通过

    2024年01月25日
    浏览(32)
  • 微信小程序-接入sse数据流并实现打字机效果( ChatGPT )

    从流中获取的数据格式如下 小程序调用SSE接口 我这边接收到的数据类型为Uint8Array,需要处理成text文本(如上图) 使对话有打字机效果 参考自:小程序实现 ChatGPT 聊天打字兼自动滚动效果 完整代码

    2024年04月09日
    浏览(60)
  • WPF实现类似ChatGPT的逐字打印效果

    前一段时间ChatGPT类的应用十分火爆,这类应用在回答用户的问题时逐字打印输出,像极了真人打字回复消息。出于对这个效果的兴趣,决定用WPF模拟这个效果。 真实的ChatGPT逐字输出效果涉及其语言生成模型原理以及服务端与前端通信机制,本文不做过多阐述,重点是如何用

    2024年02月13日
    浏览(27)
  • Vue3实现酷炫打字机效果:让你的网站文字动起来

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3

    2024年02月05日
    浏览(36)
  • springboot+vue实现ChatGPT逐字输出打字效果

    在调用OpenAI GPT接口时,如果不使用流式(stream:true)参数,接口会等待所有数据生成完成后一次返回。这个等待时间可能会很长,给用户带来不良体验。 为了提升用户体验,我们需要使用流式调用方式。在这篇文章中,我们将介绍如何使用Spring Boot和Vue对接OpenAI GPT接口,并实

    2024年02月07日
    浏览(34)
  • 打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码

    大家好,今天用 SpringBoot 、 vue 写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 ,包含前端和后端,可以直接运行 使用本技术实现的项目:aicnn.cn,欢迎大家体验 如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。 本文主要应用的技术有

    2024年01月24日
    浏览(39)
  • Android okHttp-sse 实现chatgpt逐字逐句效果

    1. 什么是SSE Server-Send Events 服务器发送事件,简称SSE。服务器主动向客户端推送消息,我们常见的有 WebSocket (SignalR) ,SSE 也是其中一种。     SSE 是HTML5规范的一部分,该规范非常简单,主要由两部分组成:第一部分是服务端与浏览器端的通讯协议(Http协议),第二部分是

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包