检测当前页面是否被隐藏
1、使用 visibilitychange 事件可监测当前页面是否被隐藏,当切换页面时document.hidden显示为 true 则为隐藏, false 就是显示状态。
2、一般在工作用主要用到用户在页面停留了多长时间。如:爱奇艺广告播放时间居然是在当前标签页激活的时候才会进行倒计时,离开当前标签页的时候,倒计时停止。
2、基本使用方式如下:
1 | document.addEventListener("visibilitychange", function () { |
3、兼容性写法如下:
1 | document.addEventListener("visibilitychange", function () { |
保留 N 位小数
1 | const toFixed = (n, fixed) => ~~(Math.pow(10, fixed) * n) / Math.pow(10, fixed); |
检查当前是否有元素处于焦点中
1、使用 document.activeElement 属性检查一个元素是否当前处于焦点。
1 | const elementIsInFocus = (el) => el === document.activeElement; |
js 实现复制功能
1、可以使用 document.execCommand("copy")
实现,具体如下:
1 | const copyToClipboard = (str) => { |
JS 实现千位分隔符
实现方式一
1、首先将数字转为字符串数组,在循环整个数组,每三位添加一个分隔逗号,最后再合并成字符串。
2、由于分隔符在顺序上是从后往前添加的:比如 1234567 添加后是 1,234,567 而不是 123,456,7,所以方便起见可以先把数组倒序排列,添加完之后再将顺序倒回来,就是正常顺序了。
3、注意:如果数字带小数的话,要把小数部分分开处理。
1 | function numFormat(num) { |
实现方式二
1、使用 JS 自带的 API toLocaleString()
,该方法返回这个数字在特定语言环境下的表示字符串。
1 | numObj.toLocaleString(locales, options); |
locales:缩写语言代码(BCP 47 language tag,例如:cmn-Hans-CN)的字符串或者这些字符串组成的数组。
options:包含一些或所有的下面属性的类。decimal => 用于纯数字格式,currency => 用于货币格式,percent => 用于百分比格式,unit => 用于单位格式。
2、注意:该方法在没有指定区域时,返回时用默认的语言环境和默认选项格式化的字符串,所以不同地区数字格式可能会有一定的差异,因此最好确保使用 locales 参数指定了使用的语言。
3、实现数字插入千位符代码如下:
1 | const a = 1234567894532; |
实现方式三
1、使用 RegExp 和 replace()
方法。
1 | function numFormat(num) { |
上述代码中,对象或者字面量所匹配的内容会被第二个参数的返回值替换。
改变对象属性名的方式
JSON.parse() && JSON.stringify()
1、缺点:如果属性值匹配到也会被更改,而且属性名中有部分匹配到也会被更改。
1 | var aaa = [ |
使用递归遍历
1、使用递归遍历对数组中每一个对象的属性名进行更改。
2、函数第一个参数是要修改的对象,第二个参数传数组 key 为要被改的属性名,value 为改成的属性名。
3、函数本身是一个深拷贝,通过对其每层中对象的“键”做匹配替换即实现了多层的“键”替换,另外这里如果传空数组此函数就是一个深拷贝。
1 | function copyTrans(obj, typeArr) { |
时间转换
将时长转成 时:分:秒
1 | const timeToMinute = (time) => { |
将时间转成 天/时/分/秒
1 | function secondsFormat(s) { |
将时间转成 年/月/日 时:分:秒
1 | function getHMS(timestamp) { |
时间戳转成 YYYY-MM-DD hh:mm:ss 新思路
1、Date 的 ‘toJSON’ 方法返回格林威治时间的 JSON 格式字符串,实际是使用 ‘toISOString’ 方法的结果。字符串形如’2018-08-09T10:20:54.396Z’,转化为北京时间需要额外增加八个时区,我们需要取字符串前 19 位,然后把 ‘T’ 替换为空格,即是我们需要的时间格式。
1 | function time(time = +new Date()) { |
将时间转为时间戳
1 | function getTimestamp(time) { |
获取文件后缀名
1、使用场景:上传文件判断后缀名。
1 | export function getExt(filename) { |
设置休眠事件
1 | export function sleep(ms) { |
生成随机字符串
1、可以用此方式生成唯一的 id。
1 | export function uuid(length, chars) { |
对象转化为 FormData 对象
1、使用场景:上传文件时我们要新建一个 FormData 对象,然后有多少个参数就 append 多少次,使用该函数可以简化逻辑。
1 | export function getFormData(object) { |
js 生成随机颜色
1 | // 随机生成rgb颜色 |
js 随机设置字体大小
1 | // 获得一个包含最小值和最大值之间的随机数 |
平滑滚动到底部
1 | function toBottom() { |
平滑滚动到顶部
1 | const onBackToTop = () => { |
数组转树形结构
1、使用递归实现:
1 | const arrayToTree = (arr, pid) => { |
2、非递归实现:
1 | const arrayToTree = (arr) => { |
筛选符合条件的数据并返回树结构
1 | const filterTreeByFunc = (tree, func) => { |
findFibonacci 函数
1、在一堆正整数中,找到最长的一组斐波那契数列段:
1 | // 实现方式一 |
过滤出数组对象 B 不存在与数组对象 A 中的所有相
1 | const A = [ |
js 定时刷新页面
1 |
|
标记搜索关键字
1 |
|
判断父元素是否包含子元素
1、原理:使用 contains 方法实现,如果 A 元素包含 B 元素,则返回 true,否则 false。
- 注意:contains 存在兼容性问题,firefox 有些版本不兼容该方法,但可以使用 compareDocumentPosition() 方法代替。它的使用形式与 contains 差不多,但返回的不是 一个布尔值,而是一个很奇怪的数值。具体请戳这里查看。
2、contains 语法:
1 | ParentElement.contains(childElement); |
3、处理 contains 兼容性:
1 | const contains = function (a, b, itself) { |
根据文件后缀判断文件类型
1 | const getFileType = (fileName) => { |
设置请求最大并发数
当需要同时发送多个请求,但是服务端有限制,需要前端控制并发数,保证最多只能同时发送 10 个请求时,就会用到如下方法:
1 | class TaskQueue { |
获取用户使用设备
1 | function mobileType() { |
发布时间: 2021-07-20
最后更新: 2022-05-04
本文标题: JsTools
本文链接: https://dnhyxc.gitee.io/2021/07/20/jsTools/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!