JS实战例子之实现自动打字机动效

 更新时间:2023年01月28日 16:23:44   作者:经海路大白狗  
什么是打字机效果呢?打字机效果即为文字逐个输出,实际上就是一种Web动画,下面这篇文章主要给大家介绍了关于JS实战例子之实现自动打字机动效的相关资料,需要的朋友可以参考下

前言

前几天遇到一个需求,产品告诉我说,希望这些字可以像自动打字那样,一个一个的出来,于是在完成需求的同时,顺便把这个方法记录出来,看大家是否也需要。

1、实现思路 

首先这个需求的目的是实现自动打字机效果,意思就是文字会一个一个出来,而且文字的最终显示提前已经固定,或者是已经获取完成了;

然后就需要每次将文字字符串拆开,每次比上一次多显示一个文字,并且清除掉上一次的显示;

每次累加要显示的文字,必定有个累加的过程,这里就需要用到递归显示,而递归的重要点在于阈值停止,所以累加的索引和字符串的长度应该有一个判断,以停止继续执行递归。

2、html布局和css样式

本功能并没有复杂的样式显示,所以布局只是用了一个div元素,而为了还原需求,将背景设置为黑底,文字设置为白色,更有一种自动打字机的科技感,代码如下:

<div class="word"></div>
 
<style>
    body {
       background: #000;
    }
    .word {
       margin: 100px;
       width: 500px;
       height: 30px;
       padding: 2px 10px;
       font-size: 26px;
       color: #FFF;
       font-weight: bold;
    }
</style>

3、预定义前置变量 

需要预定义一个最终显示的字符串; 需要定义获取dom的变量;需要定义一个索引变量,用于不但累加计算;需要定义定时打字的变量,用于setTimeout的方法定义,以实现真实打字的场景特效;需要提前定义一个获取字符串长度的变量;需要定义每个阶段显示的字符串的变量;这里共定义了6个变量,代码如下:

var wordStr = '2023年,喜迎新春,玉兔吉祥';
var wordDom = document.querySelector('.word');
 
var num = 0;
var wordTimeout = null;
var wLength = wordStr.length;
var showWord = '';

4、动效过程解析

既然是模拟打字效果,咱们定义的字符串是“2023年,喜迎新春,玉兔吉祥”,所以显示过程肯定是:第一次显示“2”,第二次显示“20”,第三次显示“202”,以此类推,通过上一步预定义的num值累加,最终将字符串全部显示出来,所以第一步代码应该是:

showWord += wordStr.charAt(num);
wordDom.innerHTML = showWord;

此时num值为0,通过字符串的charAt获取固定索引的字符,也就是“2” ,但既然要模拟真实打字效果,打字都是需要时间的,所以,我们加上setTimeout函数,有个演示打字效果:

wordTimeout = setTimeout(() => {
     showWord += wordStr.charAt(num);
     wordDom.innerHTML = showWord;
}, 300)

而这只是第1个文字,想要实现不断累加,就得有个回调,用于源源不断的累加,计算,渲染显示:

function autoWord() {
    wordTimeout = setTimeout(() => {
       showWord += wordStr.charAt(num);
       wordDom.innerHTML = showWord;
       num++;
 
       autoWord();  // 递归调用
    }, 300)
}
autoWord();

 而递归的重点在于源源不断,阈值而停

if (num < wLength) {
   autoWord();
} else {
   window.clearTimeout(wordTimeout);
   wordTimeout = null;
}

5、完整源代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自动打字机</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            background: #000;
        }
        .word {
            margin: 100px;
            width: 500px;
            height: 30px;
            padding: 2px 10px;
            font-size: 26px;
            color: #FFF;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="word"></div>
 
    <script>
        var wordStr = '2023年,喜迎新春,玉兔吉祥';
        var wordDom = document.querySelector('.word');
 
        var num = 0;
        var wordTimeout = null;
        var wLength = wordStr.length;
        var showWord = '';
 
        function autoWord() {
            wordTimeout = setTimeout(() => {
                showWord += wordStr.charAt(num);
                wordDom.innerHTML = showWord;
                num++;
 
                if (num < wLength) {
                    autoWord();
                } else {
                    window.clearTimeout(wordTimeout);
                    wordTimeout = null;
                }
            }, 300)
        }
        autoWord();
        
    </script>
</body>

6、结语

我们一年又一年的生活着,很多时候觉得没有压力,甚至也不知道自己未来应该做点什么。就像这个递归函数,只是被一些人控制着,周而复始,我们甚至忘记了思考。

有时候需要一个阈值,停下来让我们想一想,可能你还是没有想到什么

到此这篇关于JS实战例子之实现自动打字机动效的文章就介绍到这了,更多相关JS自动打字机动效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript本地存储实现用户名存储案例

    JavaScript本地存储实现用户名存储案例

    本文主要介绍了JavaScript本地存储实现用户名存储案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 原生js事件的添加和删除的封装

    原生js事件的添加和删除的封装

    在IE浏览器中添加或删除事件用attachEvent、detachEvent,下面的对事件的添加和删除做了封装,感兴趣的朋友可以参考下
    2014-07-07
  • 使用TypeScript类型注解的方法详解

    使用TypeScript类型注解的方法详解

    这篇文章主要为大家详细介绍了TypeScript的类型注解,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • JavaScript DOM 学习总结(五)

    JavaScript DOM 学习总结(五)

    当页面加载时,浏览器会创建页面的文档对象模型(Document Object Model)。文档对象模型定义访问和处理HTML文档的标准方法,本篇文章给大家介绍javascript dom 学习总结(五),感兴趣的朋友一起学习吧
    2015-11-11
  • 鸿蒙JS实战之计算器功能开发实例

    鸿蒙JS实战之计算器功能开发实例

    这篇文章主要给大家介绍了关于鸿蒙Js实战之计算器功能开发的相关资料,计算器是我们生活中经常使用的应用,此项目是基于Harmony实现的简易计算器,需要的朋友可以参考下
    2024-02-02
  • 基于JavaScript实现简单扫雷游戏

    基于JavaScript实现简单扫雷游戏

    这篇文章主要介绍了基于JavaScript实现简单扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 微信小程序开发之toast等弹框提示使用教程

    微信小程序开发之toast等弹框提示使用教程

    弹框提示是我们在开发中经常用的一个效果,下面这篇文章主要给大家介绍了微信小程序开发之toast等弹框提示实现的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • JS正则RegExp.test()使用注意事项(不具有重复性)

    JS正则RegExp.test()使用注意事项(不具有重复性)

    这篇文章主要介绍了JS正则RegExp.test()使用注意事项,结合实例形式分析了RegExp.test()方法的功能与用法,以及针对不能重复调用的解决方法,需要的朋友可以参考下
    2016-12-12
  • JS模拟的腾讯微博app撕纸效果的实例代码

    JS模拟的腾讯微博app撕纸效果的实例代码

    本来想用css3来实现,但后来脑袋一热就用了js,省的别人你ie怎么没效果啊!在腾讯微博app上看到的一个效果,鼠标击哪里就撕了哪里,跟撕报纸似的,任意点击左边面的灰色区域,查看效果,当时觉得很有意思,问了下高人,突然觉悟了,原来如此。。
    2013-05-05
  • 插件:检测javascript的内存泄漏

    插件:检测javascript的内存泄漏

    插件:检测javascript的内存泄漏...
    2007-03-03

最新评论