前端 JavaScript 必会工具库合集
工具库集合
jQuery: 让操作DOM变得更容易
官网:https://jquery.com/
中文网:https://jquery.cuishifeng.cn/
Lodash: 你能想到的工具函数它都帮你写了
官网:https://lodash.com/docs
中文网:https://www.lodashjs.com/
Animate.css: 常见的CSS动画效果都帮你写好了
官网:https://animate.style/
Axios:让网络请求变得更简单
官网:https://axios-http.com/zh/
MockJS:ajax拦截和模拟数据生成
官网:http://mockjs.com/
Moment:让日期处理更容易
官网:https://momentjs.com/
中文网:http://momentjs.cn/
ECharts:搞定所有你能想到的图表📈
官网:https://echarts.apache.org/zh
animejs:简单好用的JS动画库
官网:https://animejs.com/
editormd:markdown编辑器
官网:https://pandao.github.io/editor.md | |
validate:简单好用的JS对象验证库
官网:http://validatejs.org/
date-fns:功能和Moment几乎相同
官网:https://date-fns.org/
支持tree shaking
zepto:功能和jQuery几乎相同
官网:https://zeptojs.com/
对移动端支持更好,包体积更小
nprogress:简单好用的进度条插件YouTube就使用的是它
官网:https://github.com/rstacruz/nprogress
qs:一个用于解析url的小工具
官网:https://github.com/ljharb/qs
使用方式
对于第三方库,除了下载使用,还可以通过CDN在线使用
科普知识:CDN
CDN称之为内容分发网络(Content Delivery Network)。
简单来说,就是提供很多的服务器,用户访问时,自动就近选择服务器给用户提供资源

国内使用广泛的免费CDN站点:https://www.bootcdn.cn/
JQuery
官网:https://jquery.com/
中文网:https://jquery.cuishifeng.cn/
CDN:https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
针对DOM的操作无非以下几种:
JQuery可以让上面整个过程更加轻松
jQuery函数
jQuery提供了一个函数,名称为jQuery,也可以写作$
该函数提供了强大的DOM控制能力
通过下面的示例,可以快速理解jQuery的核心功能
1// 获取类样式为container的所有DOM
2const container = $(".container")
3
4// 获取container后面的兄弟元素,元素类样式必须包含list
5container.nextAll(".list");
6
7// 删除元素
8container.remove();
9
10// 找到所有类样式为list元素的后代li元素,给它们加上类样式item
11$(".list li").addClass("item");
12
13// 为所有p元素添加一些style
14$("p").css({ "color": "#ff0011", "background": "blue" });
15
16// 注册DOMContentLoaded事件
17$(function(){
18 // ...
19})
20
21// 给所有li元素注册点击事件
22$("li").click(function(){
23 // ...
24})
25
26// 创建一个a元素,设置其内容为link,然后将它作为子元素追加到类样式为.list的元素中
27$("<a>").text("link").appendTo(".list");
下面依次介绍jQuery中的核心概念,以便于文档查阅
jQuery对象和DOM对象
通过jQuery得到的元素是一个jQuery对象,而不是传统的DOM
jQuery对象是一个伪数组,它和DOM元素的关系如下

jQuery对象和DOM之间可以互相转换
1// jQuery -> DOM
2jQuery对象[索引]
3jQuery对象.get(索引)
4
5// DOM -> jQuery
6$(DOM对象)
官网文档中的目录
| 目录名 |
内容 |
| 选择器 |
选择器是一个字符串,用于描述要选中哪些元素 |
| 筛选 |
在当前jQuery对象的基础上,进一步选中元素 |
| 文档处理 |
更改HTML文档结构,例如删除元素、清空元素内容、改变元素之间的关系 |
| 属性 |
控制元素属性,例如修改类样式、读取和设置文本框的value、读取和设置img的src |
| css |
控制元素style样式,例如改变字体颜色、设置背景、获取元素尺寸、获取和设置滚动位置 |
| 事件 |
监听元素的事件,例如监听文档加载完成、监听元素被点击 |
| ajax |
jQuery封装了XHR,使ajax访问更加方便 |
| 这部分功能目前已被其他第三方库全面超越 |
|
|
|
Lodash
官网:https://lodash.com/docs
中文网:https://www.lodashjs.com/
CDN:https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js
Lodash是一个针对ES的古老工具库,它出现在ES5之前
Lodash提供了大量的API,弥补了ES中对象、函数、数组API不足的问题
你可以想到的大部分工具函数,都可以在Lodash中找到
如果你不编写框架或通用库,一般不会用到Lodash
Animate.css
官网:https://animate.style/
CDN:https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.min.css
Animate.css 库提供了大量的动画效果,开发者仅需使用它提供的类名即可
注意:animate.css中的动画对行盒无效
基本使用
类名格式为:
animate__animated animate__效果名
效果名分为以下几个大类,你可以从官网中找到对应的分类,每个分类下有多种效果名可供使用
| 分类 |
含义 |
| Attention seekers |
强调 |
| Back entrances |
进入 |
| Back exits |
退出 |
| Bouncing entrances |
弹跳进入 |
| Bouncing exits |
弹跳退出 |
| Fading entrances |
淡入 |
| Fading exits |
淡出 |
| Flippers |
翻转 |
| Lightspeed |
光速 |
| Rotating entrances |
旋转进入 |
| Rotating exits |
旋转退出 |
| Specials |
特殊效果 |
| Zooming entrances |
缩放进入 |
| Zooming exits |
缩放退出 |
| Sliding entrances |
滑动进入 |
| Sliding exits |
滑动退出 |
|
|
工具类
Animate.css 还提供了多个工具类,可以控制动画的延时、重复次数、速度
1/* 默认无延时 */
2animate__delay-1s /* 延时1秒 */
3animate__delay-2s /* 延时2秒 */
4animate__delay-3s /* 延时3秒 */
5animate__delay-4s /* 延时4秒 */
6animate__delay-5s /* 延时5秒 */
1/* 默认重复1次 */
2animate__repeat-2 /* 重复2次 */
3animate__repeat-3 /* 重复3次 */
4animate__infinite /* 重复无限次 */
1/* 默认1秒内完成动画 */
2animate__slow /* 2秒内完成动画 */
3animate__slower /* 3秒内完成动画 */
4animate__fast /* 800毫秒内完成动画 */
5animate__faster /* 500毫秒内完成动画 */
示例:
1<!--
2使用animate.css
3动画名:bounce
4速度:快
5重复:无限次
6延迟:1秒
7-->
8<h1
9 class="
10 animate__animated
11 animate__bounce
12 animate_fast
13 animate__infinite
14 animate__delay-1s
15 "
16 >
17 Hello Animate
18</h1>
Axios
官网:https://axios-http.com/zh/
CDN:https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js
axios是一个请求库,在浏览器环境中,它封装了XHR,提供更加便捷的API发送请求
基本使用
1// 发送 get 请求到 https://study.duyiedu.com/api/herolist,输出响应体的内容
2axios.get("https://study.duyiedu.com/api/herolist").then(resp=>{
3 console.log(resp.data); // resp.data 为响应体的数据,axios会自动解析JSON格式
4})
5
6// 发送 get 请求到 https://study.duyiedu.com/api/user/exists?loginId=abc,输出响应体的内容
7axios.get("https://study.duyiedu.com/api/user/exists", {
8 params: { // 这里可以配置 query,axios会自动将其进行Url编码
9 loginId: "abc"
10 },
11}).then(resp=>{
12 console.log(resp.data); // resp.data 为响应体的数据,axios会自动解析JSON格式
13})
14
15// 发送 post 请求到 https://study.duyiedu.com/api/user/reg
16// axios 会将第二个参数转换为JSON格式的请求体
17axios.post("https://study.duyiedu.com/api/user/reg", {
18 loginId: 'abc',
19 loginPwd: '123123',
20 nickname: '棒棒鸡'
21}).then(resp=>{
22 console.log(resp.data); // resp.data 为响应体的数据,axios会自动解析JSON格式
23})
axios的基本用法为:
1axios.get(url地址, [请求配置]);
2axios.post(url地址, [请求体对象], [请求配置]);
3
4// 或直接使用 axios 方法,在请求配置中填写请求方法
5axios(请求配置);
实例
axios允许开发者先创建一个实例,后续通过使用实例进行请求
这样做的好处是可以预先进行某些配置
示例:
1// 创建实例
2const instance = axios.create({
3 baseURL: 'https://study.duyiedu.com/'
4});
5
6// 发送 get 请求到 https://study.duyiedu.com/api/herolist,输出响应体的内容
7instance.get("/api/herolist").then(resp=>{
8 console.log(resp.data); // resp.data 为响应体的数据,axios会自动解析JSON格式
9})
拦截器
有时,我们可能需要对所有的请求或响应做一些统一的处理
比如,在请求时,如果发现本地有token,需要附带到请求头
又比如,在拿到响应后,我们仅需要取响应体中的data属性
再比如,如果发生错误,我们需要做一个弹窗显示
这些统一的行为就非常适合使用拦截器
1// 添加请求拦截器
2axios.interceptors.request.use(function (config) {
3 // config 为当前的请求配置
4 // 在发送请求之前做些什么
5 // 这里,我们添加一个请求头
6 const token = localStorage.getItem('token');
7 if(token){
8 config.headers.authorization = token;
9 }
10 return config; // 返回处理后的配置
11});
12
13// 添加响应拦截器
14axios.interceptors.response.use(function (resp) {
15 // 2xx 范围内的状态码都会触发该函数。
16 // 对响应数据做点什么
17 return resp.data.data; // 仅得到响应体中的data属性
18}, function (error) {
19 // 超出 2xx 范围的状态码都会触发该函数。
20 // 对响应错误做点什么
21 alert(error.message); // 弹出错误消息
22});
设置好拦截器后,后续的请求和响应都会触发对应的函数
拦截器可以针对axios实例进行设置
MockJS
官网:http://mockjs.com/
CDN:https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.0/mock-min.js
MockJS有两个作用:
- 产生模拟数据
- 拦截Ajax
下面两张图说明MockJS的作用


仅模拟数据
数据模板有其特有的书写规范,具体写法见官网
拦截+模拟数据
1Mock.mock(要拦截的url, 要拦截的请求方法, 数据模板)
更多用法见官网
注意,MockJS拦截数据的原理是重写了XHR,因此它仅能拦截XHR的数据请求,而无法拦截使用fetch发出的请求
具体的,MockJS可以拦截:
- 原生
XmlHttpRequest
jQuery中的$.ajax
axios
MockJS可以模拟网络延时,用法为:
1Mock.setup({
2 timeout: 400 // 网络延时400毫秒
3})
4
5Mock.setup({
6 timeout: '200-600' // 网络延时200-600毫秒
7})
Moment
官网:https://momentjs.com/
中文网:http://momentjs.cn/
CDN:https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js
各种语言包:https://www.bootcdn.cn/moment.js/
Moment提供了强大的日期处理能力
时间基础知识
单位
| 单位 |
名称 |
换算 |
| hour |
小时 |
1 day = 24 hours |
| minute |
分钟 |
1 hour = 60 minutes |
| second |
秒 |
1 minute = 60 seconds |
| millisecond (ms) |
毫秒 |
1 second = 1000 ms |
| nanosecond (ns) |
纳秒 |
1 ms = 1000 ns |
GMT和UTC
世界划分为24个时区,北京在东8区,格林威治在0时区。

GMT:Greenwish Mean Time 格林威治世界时。太阳时,精确到毫秒。
UTC:Universal Time Coodinated 世界协调时。以原子时间为计时标准,精确到纳秒。
国际标准中,已全面使用UTC时间,而不再使用GMT时间
GMT和UTC时间在文本表示格式上是一致的,均为星期缩写, 日期 月份 年份 时间 GMT,例如:
Thu, 27 Aug 2020 08:01:44 GMT
另外,ISO 8601标准规定,建议使用以下方式表示时间:
YYYY-MM-DDTHH:mm:ss.msZ
例如:
2020-08-27T08:01:44.000Z
GMT、UTC、ISO 8601都表示的是零时区的时间
Unix 时间戳
Unix 时间戳(Unix Timestamp)是Unix系统最早提出的概念
它将UTC时间1970年1月1日凌晨作为起始时间,到指定时间经过的秒数(毫秒数)
程序中的时间处理
程序对时间的计算、存储务必使用UTC时间,或者时间戳
在和用户交互时,将UTC时间或时间戳转换为更加友好的文本

思考下面的问题:
- 用户的生日是本地时间还是UTC时间?
- 如果要比较两个日期的大小,是比较本地时间还是比较UTC时间?
- 如果要显示文章的发布日期,是显示本地时间还是显示UTC时间?
北京时间2020-8-28 10:00:00和格林威治2020-8-28 02:00:00,两个时间哪个大,哪个小?
北京的时间戳为0和格林威治的时间戳为0,它们的时间一样吗?
- 一个中国用户注册时填写的生日是
1970-1-1,它出生的UTC时间是多少?时间戳是多少?
Moment的核心用法

Moment的使用分为两个部分:
- 获得Moment对象
- 针对Moment对象做各种操作