实现酷炫的打字机效果插件typed.js

前言:
最近在写前端项目的过程中,在逛别人的优质的个人博客的时候,发现一个好玩有趣的东西。看下图,类似在打字的效果,然后又在思考的感觉,感觉整个网页都充满了思想。于是我就去百度这种效果怎么实现。
有很多原生的实现办法,但几乎都是js在操作Dom元素,但是我是在vue项目上编写的,显然不妥。这个时候发现了typed.js,他会在vue使用的时候多封装了一层,使得不是操作dom。现在分享下这个插件。

typed.js的介绍

typed.js是一个类型化库,效果是用打字机的方式显示一段话,可以自定义任何字符串、指定显示速度、指定是否循环等
如下图官方(作者)演示。

其实可以使用原生JS来实现这个效果,但是还是很麻烦的
typed.js是一个轻量级的JavaScript插件, 用于实现页面文字的打字动画效果
这是一款轻量级,使用简单,功能强大的插件。

typed.js的使用

环境准备

在原生html中 引入CDN

1
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.12"></script>

在vue中 安装依赖

1
2
3
npm install typed.js
然后我们在需要的目录下,或者main.js 引入
import Typed from 'typed.js';
使用

(1) 改变光标的样式 通过cursorChar: '_',属性来改变光标的样式
(2) 批量键入 通过转义字符``来包括需要批量展示的数据或者文字。会有一段文字不是通过打印出来的,而是突然完整的出现,会有一种提问打字,机器问答的感觉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<body>
<span class="box"></span>
</body>
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.12"></script>
<script>var typed = new Typed(".box", {
strings: ["热爱永远热泪盈眶", "只要累不死,就卷死他人",
"未来可期","你知道爱情吗?`我知道爱情买卖`"],
typeSpeed: 100,//打字的速度
smartBackspace: true, // 开启智能退格 默认false
cursorChar: '♡',
backSpeed: 50,//后退速度
backDelay: 500,//后退延迟
loop:true,//是否循环
startDelay:1000,//起始时间
fadeOut:true,//淡出效果
});

</script>

可以在页面上放置HTML div并从中读取,而不是使用strings数组来插入字符串。这允许机器人、搜索引擎以及禁用JavaScript的用户,在页面上查看您的文本。

1
2
3
4
5
6
7
8
9
10
<body>
<div id="typed-strings">
<p>你像 <strong>天外来物一样 </strong> 求之不得</p>
<p>你在世俗的名字里, </em><em>不重要了。</em> --薛之谦</p>
</div>
<span id="typed"></span>
</body>
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.12"></script>
<script>
</script>

在Vue中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<template>
<div class="rightbox">
<div class="headerimg" :style="{'background-image':'url('+img.url+')'}">
<div class="element_box">
<span class="element"></span>
</div>
</div>
<div class="box">
<div class="left">

</div>
<div class="right">

</div>
</div>
</div>
</template>

<script>
import Typed from 'typed.js'
export default {
data () {
return {
img: {
url: require('@/assets/image/headerimg2.png')
},
typedjs: ''
}
},
methods: {
headertitle () { // 打字机效果
this.typedjs = new Typed('.element', {
strings: ['不负青云之志,永存赤子之心'],
typeSpeed: 100, // 打字的速度
cursorChar: '|', // 光标
smartBackspace: true, // 开启智能退格 默认false
backSpeed: 50, // 后退速度
backDelay: 500, // 后退延迟
loop: true// 是否循环 默认false
// startDelay:1000,//起始时间
// fadeOut:true,//淡出效果
})
}
},
mounted () {
this.headertitle()
}
}
</script>

<style lang="less" scoped>
.rightbox{
padding-left: 8rem;
width: 100%;
.headerimg{
width: 100%;
height: 100vh;
position: relative;
// background: url();
background-repeat: no-repeat;
background-position: center;
background-size: cover;
img{
width: 100%;
// height: 100vh;
}
.element_box{
position: absolute;
top: 60%;
// left: 50%;
font-size: 40px;
display: block;
text-align: center;
width: 100%;
-webkit-background-clip: text;
background-clip: text;
background-image: linear-gradient(rgb(42, 42, 41), rgb(255, 68, 0));
-webkit-text-fill-color: transparent;
}
}
}
</style>

更多属性
直接在标签上加属性就行,全部的属性如下:

属性 类型 描述 用法
strings 数组 要输入的字符串 strings="['Text 1', 'Text 2']"
stringsElement 包含字符串子元素的元素的ID :stringsElement="'myId'"
typeSpeed 输入速度(以毫秒为单位) :typeSpeed="50"
startDelay 开始输入之前的时间(以毫秒为单位) :startDelay="1000"
backSpeed 退格速度(以毫秒为单位) :backSpeed="10"
smartBackspace 布尔型 仅退格与上一个字符串不匹配的内容 :smartBackspace="true"
shuffle 布尔型 洗弦(打乱语句的输出顺序) :shuffle="true"
backDelay 退格前的时间(以毫秒为单位) :backDelay="100"
fadeOut 布尔型 淡出而不是退格 :fadeOut="true"
fadeOutClass 淡入淡出动画CSS类 :fadeOutClass="'fadeOutClass'"
fadeOutDelay 布尔型 淡出延迟(以毫秒为单位) :fadeOutDelay="true"
loop 布尔型 循环字符串 :loop="true"
loopCount 循环次数 :loopCount="3"
showCursor 布尔型 显示光标 :showCursor="true"
cursorChar 光标字符 :cursorChar="'_'"
autoInsertCss 布尔型 将游标CSS插入并将HTML淡出 :autoInsertCss="true"
attr 用于输入Ex的属性:输入占位符,值或仅HTML文本 :attr="'placeholder'"
bindInputFocusEvents 布尔型 如果el是文本输入,则绑定到焦点并模糊 :bindInputFocusEvents="true"
contentType 纯文本格式为“ html”或“ null” :contentType="'html'"