【JS真好玩】自动打字机效果

在这里插入图片描述


目录

    • 一、前言
    • 二、布局分析
    • 三、总体样式
    • 四、中间部分
    • 五、底部
      • 5.1 div
      • 5.2 label
      • 5.3 input
    • 六、JS让它动起来
      • 6.1定时器
      • 6.2 字符串处理
        • 6.2.1 slice
        • 6.2.2 splice
        • 6.3.3 split
    • 七、总结


一、前言

大家好,今天实现一个自动打字机效果,旨在实现一些网上很小的demo样例,通过每一个小demo能够巩固一下我们的前端基础知识。

今天,主要利用定时器、flex布局实现一个自动打字机效果。

效果展示

考察

  • flex布局、定时器、字符串
  • 建议用时20~35min

二、布局分析

我们主要把自动打字机分成3个部分实现:

  1. 总体的背景及布局
  2. 中间部分的文本显示
  3. 底部的速度调节
    • 左侧提示文本
    • 右侧input输入框

接下来,我们一步步实现这些操作

三、总体样式

先对body的样式进行操作,背景颜色、flex总布局设置

body {background-color: darksalmon;font-family: 'Roboto', sans-serif;display: flex;height: 100vh;align-items: center;justify-content: center;
}

这里大家可能会对代码里面的height值有一些疑惑,什么是100vh?为什么不是px呢?

vm/vh是css3引入的一个新的单位,与视口有关(PC端的可视区域)。

  • vm: 1vm等于视口宽度的1%
  • vh: 1vh等于视口高度的1%
  • vmin:选取vm和vh中最小的那个
  • vmax:选取vm和vh中最大的那个

100vh就是当前视口的宽度,这可以让我们打字机的布局更好的适配窗口大小。

2

四、中间部分

 <h1 id="text">Starting...</h1>

中间部分我们可以直接使用h1标题标签,独占一行。

2

五、底部

<div class="box"><label for="speed">Speed:</label><input type="number" name="speed" id="speed" value="1" min="1" max="10" step="1">
</div>

3

5.1 div

底部我们先有一个带有半透明背景颜色的盒子,给这个盒子添加一些样式

.box {position: absolute;display: block;bottom: 20px;background: rgba(0, 0, 0, 0.1);padding: 10px 20px;font-size: 18px;
}

底部使用绝对定位,由于父元素没有定位,所以盒子参考页面为基准。

定位

  • 静态定位static:定位的默认值,元素正常显示,定位的属性不可用
  • 相对定位relative:相对于元素一开始的位置定位,不脱离标准流
  • 绝对定位absolute:相对于最近一级带有定位的父级节点,脱标
  • 固定定位fixed:相对于页面视口定位,固定位置
  • 粘性定位sticky:relative 和 fixed 的结合体,能够实线类似吸附的效果,不常用

5.2 label

label {cursor: default;
}

这里主要复习的是cursor对于鼠标的图标显示:

问号

cursor: help;

转圈

cursor: wait;

十字星号

cursor: crosshair;

禁止

cursor: not-allowed;

搜索

cursor: zoom-in;

小手

cursor: grab;

5.3 input

#speed {width: 50px;font-size: 18px;padding: 5px;border: 0;outline: none;background-color: darksalmon;
}

html5新增的input,number属性,可以了解一下。

内置验证以拒绝非数字输入。浏览器可能会选择提供步进箭头,让用户可以使用鼠标增加和减少输入的值,或者只需用指尖敲击即可。

六、JS让它动起来

完成了一些页面的基本布局之后,我们就可以使用js代码让文字动起来了。

const textEl = document.querySelector('#text');
const speedEl = document.querySelector('#speed');
const text = "Hello World!";
let count = 1;
let speed = 300 / speedEl.value;function writeText() {textEl.innerHTML = text.slice(0, count);count++;if (count > text.length) {count = 1;}setTimeout(writeText, speed);
}
writeText();
speedEl.addEventListener('input', (e) => {speed = 300 / e.target.value
});

想要让文字像打字机一样动起来,我们只需要定义一个函数,函数里面内置了定时器,让它不断调用就行了。

6.1定时器

前端的定时器有两种,一种是一次性定时器setTimeout,一种是重复性定时器setInterval

img

如上图所示,setTimeout你只有点击一下按钮物体才会向前跑过了15ms就向前跑10px。而对于setInterval只需要点击一次便会每间隔15ms执行一次,页面中的倒计时效果也是这样做的。

我们函数只需要内置setTimeout就行了,每执行一次调用一次。

6.2 字符串处理

通常字符串处理会有好几种方法,而字符串或者数组slice、splice、split傻傻分不清楚咋办?今天一招解决。

在这里插入图片描述

6.2.1 slice

slice() 方法提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串。

slice(begin,end)截取字符串从begin开始到end-1结束的字符串,支持-遍历。

const str = 'The quick brown fox jumps over the lazy dog.';console.log(str.slice(31));
// expected output: "the lazy dog."console.log(str.slice(4, 19));
// expected output: "quick brown fox"console.log(str.slice(-4));
// expected output: "dog."console.log(str.slice(-9, -5));
// expected output: "lazy"

适用于字符串或数组

6.2.2 splice

splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容,此方法会改变原数组

splice(index, change, value)

index:开始的下标

change:代表删除的元素

value:插入的值,不写直接删除

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

适用于数组

6.3.3 split

split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。

const str = 'The quick brown fox jumps over the lazy dog.';const words = str.split(' ');
console.log(words);
//Array ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]const chars = str.split('');
console.log(chars);
// ["T", "h", "e", " ", "q", "u", "i", "c", "k", " ", "b", "r"......const strCopy = str.split();
console.log(strCopy);
// expected output: Array ["The quick brown fox jumps over the lazy dog."]

适用于字符串转为数组

七、总结

今天主要学习了flex布局、定时器、字符串构建的自动打字机小项目,冲冲冲!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109674.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp国际化npm install vue-i18n报错

npm install vue-i18n //npmyarn add vue-i18n //yarn在vue2环境下&#xff0c;默认安装 npm install vue-i18n 的版本是 vue-i18n9.1.9&#xff0c;所以报错。 npm view vue-i18n versions --json 用以上命令查看版本&#xff1a; vue2建议5.0版本 npm install vue-i1…

python可视化matplotlib——绘制正弦和余弦

这是一个使用matplotlib库绘制正弦和余弦函数曲线的代码示例。代码中导入了需要的库&#xff0c;并设置了x轴和y轴的标签字体为华文楷体。然后&#xff0c;使用numpy生成一组x轴上的值t&#xff0c;并使用正弦函数生成对应的y轴值s&#xff0c;再使用余弦函数生成对应的y轴值z。…

【LeetCode-中等题】24. 两两交换链表中的节点

文章目录 题目方法一&#xff1a;递归方法二&#xff1a;三指针迭代 题目 方法一&#xff1a;递归 图解&#xff1a; 详细版 public ListNode swapPairs(ListNode head) {/*递归法:宗旨就是紧紧抓住原来的函数究竟返回的是什么?作用是什么即可其余的细枝末节不要细究,编译器…

docker高级(redis集群三主三从)

1. 新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privilegedtrue -v /…

Docker安装MySQL、Redis如何自启?

1、问题&#xff1a; Docker自启&#xff1a;http://t.csdn.cn/L2v55 重新启动虚拟机&#xff0c;Docker自动启动之后&#xff0c;发现MySQL、Redis都没有启动。 docker ps 没查到有启动的容器。 docker ps -a 查看所有的容器。 2、先使用 su root 命令&#xff0c;切换到root…

【通用消息通知服务】0x3 - 发送我们第一条消息(Websocket)

【通用消息通知服务】0x3 - 发送我们第一条消息 项目地址: A generic message notification system[Github] 实现接收/发送Websocket消息 Websocket Connection Pool import asyncio from asyncio.queues import Queue from asyncio.queues import QueueEmpty from contextli…

Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

C++ IO流

文章目录 一.C语言的输入与输出二.流是什么三.CIO流1.C标准IO流2.C文件IO流&#xff08;1&#xff09;文件操作步骤&#xff08;2&#xff09;以二进制的形式操作文件&#xff08;3&#xff09;以文本的形式操作文件&#xff08;4&#xff09;使用>>和<<对文件进行…

get请求报错400 非法参数

get请求报错400 非法参数 背景&#xff1a;get请求数据&#xff0c;SpringBoot提供接口&#xff0c;返回400&#xff0c;报错非法参数此种情况排除接口本身错误之外&#xff0c;检查参数中有没有特殊字符 " < > [ \ ] ^ { | } 我这边就是因为其中一个参数中有中括…

Spring MVC 四:Context层级

这一节我们来回答上篇文章中避而不谈的有关什么是RootApplicationContext的问题。 这就需要引入Spring MVC的有关Context Hierarchy的问题。Context Hierarchy意思就是Context层级&#xff0c;既然说到Context层级&#xff0c;说明在Spring MVC项目中&#xff0c;可能存在不止…

怎么建设ITIIL运维管理体系?

市场上大多数ITIL解决方案都过于复杂&#xff0c;让我们举一个客户希望实施ITIL方案的例子。首先&#xff0c;客户要通过ITIL咨询来定义ITIL流程&#xff0c;并使其与业务目标保持一致。接下来就是购买ITIL软件&#xff1b;大多数ITIL解决方案将事件、问题和变更管理作为不同的…

STM32CubeMX配置STM32G0 Standby模式停止IWDG(HAL库开发)

1.打开STM32CubeMX选择好对应的芯片&#xff0c;打开IWDG 2.打开串口1进行调试 3.配置好时钟 4.写好项目名称&#xff0c;选好开发环境&#xff0c;最后获取代码。 5.打开工程&#xff0c;点击魔术棒&#xff0c;勾选Use Micro LIB 6.修改main.c #include "main.h"…

【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Ja…

浅谈 Linux 下 vim 的使用

Vim 是从 vi 发展出来的一个文本编辑器&#xff0c;其代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 Vi 是老式的字处理器&#xff0c;功能虽然已经很齐全了&#xff0c;但还有可以进步的地方。Vim 可以说是程序开发者的一项很好用的工…

Redis三种特殊数据类型

Redis三种特殊数据类型 geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引&#xff08;请注意&#xff0c;使用此命令&a…

开始MySQL之路—— DDL语法、DML语法、DQL语法基本操作详解

DDL语法 DDL&#xff08;Data Definition Language&#xff09; 数据定义语言&#xff0c;该语言部分包括以下内容。 对数据库的常用操作 对表结构的常用操作 修改表结构 对数据库的常用操作 1: 查看当前所有的数据库 show databases; 2&#xff1a;创建数据库 create dat…

【项目实战典型案例】05.前后端分离的好处(发送调查问卷)

目录 一、背景二、思路三、过程1、主要的业务逻辑2、解决问题的思路 四、总结五、面向对象的好处 一、背景 以下流程图是给用户发送调查问的整体流程&#xff0c;将不必要的业务逻辑放到前端进行处理。这样导致逻辑混乱难以维护。前后端分离的其中一个目的是将功能的样式放在了…

数据结构 - 线性表的顺序存储

一、顺序存储定义&#xff1a; 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中。简言之&#xff0c;逻辑上相邻&#xff0c;物理上也相邻顺序表中&#xff0c;任一元素可以随机存取&#xff08;优点&#xff09; 二、顺序表中元素存储位置的计算 三、顺序表在算法中的实…

RISC-V公测平台发布 · 在SG2042上配置Jupiter+Octave科学计算环境

简介 JupyterHub是一个开源的共享计算平台&#xff0c;它为每个用户管理一个单独的 Jupyter 环境&#xff0c; 可以用于学生班级、企业数据科学小组或科学研究小组。它是一个多用户中心&#xff0c;可以生成、管理和代理多个单用户Jupyter笔记本服务器的实例。 GNU Octave是一…

视频怎么变成动态gif图?一个方法轻松转换

怎么将视频转换成gif动态图片呢&#xff1f;大家在日常看电影、电视剧&#xff0c;刷短视频的时候想要将其做成gif表情包时&#xff0c;应该如何操作呢&#xff1f;这时候&#xff0c;给大家分享一款操作简单无需下载的视频gif转换&#xff08;https://www.gif.cn/&#xff09;…