前端公用 .js
前端工具类
__畫戟__
前端。知之为知之,不知为不知
展开
-
有时效的 localStorage
封装一个 maxAgeStorage 来对 localStorage 进行操作setItem时,外层数据多放进一个 expires 来设置过期时间getItem时,如果现在时间小于 expires 则清除该key原创 2022-05-18 22:46:12 · 174 阅读 · 0 评论 -
动态加载script资源
动态加载script资源原创 2023-02-27 21:45:35 · 613 阅读 · 0 评论 -
H5 长按dom保存为图片
在 H5 实现一个长按 dom 节点,将当前节点保存为图片的功能,核心步骤如下实现长按功能dom 转 canvas原创 2022-04-17 23:08:33 · 1904 阅读 · 1 评论 -
页面水印添加工具【watermark-plus】,可防止手动删除水印,支持文本水印、图片水印、定制水印内容
安全问题不能大意,对于一些比较敏感的内容,我们可以通过水印方案,最大程度地给浏览者警示的作用,减少泄密的情况,甚至泄密了,也有可能追踪到泄密者。watermark-plus,使用简单,可防止手动删除水印;支持Vue、React等JS框架;支持文本水印;支持图片水印;可防止被删除;可防止重复渲染;可动态适应超长水印文本;高清晰度;支持浏览器端打印;可配置性强;支持自定义水印内容(排版、样式、内容);原创 2021-12-24 15:14:59 · 5241 阅读 · 13 评论 -
各浏览器scrollTop差异及兼容解决办法
1、各浏览器下 scrollTop的差异IE:对于没有doctype声明的页面,使用 document.body.scrollTop 或 document.documentElement.scrollTop;对于有doctype声明的页面,则使用 document.documentElement.scrollTop;Chrome、Firefox:对于没有doctype声明的页面,使用 document.body.scrollTop 来获取 scrollTop高度 ;...原创 2021-10-29 11:46:56 · 1535 阅读 · 1 评论 -
解决【Antd的Tabs页签组件在TabPane按钮宽度发生变化后,底部active-bar定位不准确】
问题描述:按钮宽度发生变化之后定位不准确解决后:代码:/** * 重置tab active bar 位置 * @param id dom id */ resetTabActivePosition = (id) => { const el = document.getElementById(id) setTimeout(() => { var activeEl = el.querySele原创 2021-07-07 18:16:38 · 2286 阅读 · 0 评论 -
移动端浏览器Touch事件判断手指滑动方向方法
$("body").on("touchstart", function(e) {e.preventDefault();startX = e.originalEvent.changedTouches[0].pageX,startY = e.originalEvent.changedTouches[0].pageY;});$("body").on("touchmove", function(e) {e.preventDefault();moveEndX =...原创 2021-06-25 11:21:17 · 358 阅读 · 0 评论 -
实现【antd 单元格合并处理,分页也有效】
函数:/** * 单元格合并处理 * @param text 当前单元格的值 * @param dataSource 当前分页所有数据 * @param key 当前列的dataIndex * @param index 当前数据所在下标 * @returns {number} 待合并单元格数量 */// eslint-disable-next-line max-paramsexport default (text, dataSource, index, key) => ...原创 2021-05-14 18:07:57 · 1714 阅读 · 4 评论 -
Vue 实现在文本溢出后浮现Tooltip、及文本展开收起效果
1.一个实现在文本溢出后浮现Tooltip,文本不溢出则不显示Tooltip的Vue组件;2.还可以做文本展开收起效果;持续迭代中,开源原创 2021-06-05 18:21:10 · 4146 阅读 · 9 评论 -
大文件分片断点续传底层组件逻辑
基于 WebUploader,实例化 WebUploader,参数见文中注释this.uploader = WebUploader.create({ ...})注册 WebUploadernew WebUploader.Uploader.register({ beforeSend: (block) => { /** * 上传前,进行分片,分片后每一个片都有主键,然后接口验证是否已传过 * 若上传过则不再上传,若没有上传过则续传。 */ .原创 2021-03-09 22:03:21 · 472 阅读 · 2 评论 -
antd Table 列hover高亮
效果图:代码:js:css:原创 2021-02-26 15:41:15 · 1671 阅读 · 0 评论 -
uni.uploadFile() 成功后返回数据为JSON.stringify()
uni.chooseVideo({ sourceType: ['camera'], success: (file) => { uni.showLoading({ title: '正在上传认证视频' }) uni.uploadFile({ url: `${baseUrl}/authenticate/certbyfacevideo.json`, ...原创 2021-02-25 19:56:24 · 4221 阅读 · 0 评论 -
正则控制输入input只能输入数字、小数
// 输入内容限制 handleKeyDown(e) { // 允许的输入的键值 const regular = ['.', 'Backspace'] if (isNaN(Number(e.key))) { if (!regular.includes(e.key)) { e.returnValue = false return false } } }原创 2021-02-25 19:06:35 · 325 阅读 · 0 评论 -
获取URL参数
export default function getQuery(key, url) { url = url || window.location.href; if (url.indexOf('#') !== -1) url = url.substring(0, url.indexOf('#')); let rts = []; let rt; let queryReg = new RegExp('(^|\\?|&)' + key + '=([^&]*)(?=&|.原创 2021-02-19 10:52:23 · 174 阅读 · 0 评论 -
获取操作系统信息
export default function getDetect() { let platForm = navigator.platform; let isWin = platForm === 'Win32' || platForm === 'Windows'; let isMac = platForm === 'Mac68K' || platForm === 'MacPPC' || platForm === 'Macintosh' || platForm =.原创 2021-02-19 10:51:08 · 171 阅读 · 0 评论 -
获取浏览器版本信息
export default function useBrowser() { let userAgent = navigator.userAgent; let isOpera = userAgent.indexOf('Opera') > -1; let isEdge = userAgent.indexOf('Edge') > -1; let isSafari = userAgent.indexOf('Safari') > -1 && userAgent.i.原创 2021-02-19 10:49:51 · 263 阅读 · 0 评论 -
Git - .gitignore文件的用法
简介.gitignore文件的作用.gitignore文件用来忽略被指定的文件或文件夹的改动,被记录在.gitignore文件里的文件或文件夹,是无法被git跟踪到的,换句话说,被忽略的文件是不会被放入到远程仓库里的,当然本地库中还有,只是push的时候不会上传。.gitignore文件存放于git仓库的根目录下。语法#表示注释,如:# Here is comment.忽略文件/文件夹直接写入文件或文件夹名即可,指定文件夹里的所有文件也会一起被忽略,如下:/mtk/ 过滤整个文件原创 2020-12-27 21:30:39 · 254 阅读 · 0 评论 -
基于Antd远程搜索Select 受控组件,接受所有Antd Select API,参数灵活可配置
基于Antd远程搜索Select 受控组件,接受所有Antd Select API,参数灵活可配置1.可以支持传入接口、配置label、value显示select2.同时支持远程搜索3.支持防抖4.支持多选及最大可选数量5.支持配置分页及搜索条件6.支持optios右侧显示其他字段7.支持Antd Select所有props、api原创 2021-01-06 09:53:40 · 1618 阅读 · 0 评论 -
基于ElementUI远程搜索Select组件,接受所有elementUI Select API,参数灵活可配置
基于ElementUI远程搜索Select 受控组件,接受所有ElementUI Select API,参数灵活可配置1.可以支持传入接口、配置label、value显示select2.同时支持远程搜索3.支持防抖4.支持多选及最大可选数量5.支持配置分页及搜索条件6.支持optios右侧显示其他字段7.支持ElementUI Select所有props、api原创 2021-01-06 09:53:15 · 707 阅读 · 0 评论 -
何谓防抖和节流?
【防抖】的意思是,在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效。【节流】的意思是,规定时间内,只触发一次。结合以上两种情况,回到我们最实际的场景,比如防止表单提交按钮被多次触发,我们应该选择使用节流而不是防抖方案。原创 2020-09-21 13:51:24 · 579 阅读 · 0 评论 -
js 数组扁平化
const data = [ { id: 1, title: "课程 1", children: [ { id: 4, title: "课程 1-1" }, { id: 5, title: "课程 1-2", children: [ .原创 2020-09-21 13:43:45 · 169 阅读 · 0 评论 -
JS 深拷贝
// 判断数据类型 function dataType(obj) { const map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[objec...原创 2020-09-09 15:32:32 · 186 阅读 · 0 评论 -
如何终止前端发起的请求?
问题描述:当前端请求发送并且响应未完成时,终止请求,不再返回数据问题案例:1,一些列表页接口比较慢,改变查询条件后发送查询请求,这样就和上次的查询请求形成两个异步请求,有时可能就会发生本次请求先得到响应数据,然后上一次请求后得到响应数据,这样在页面上的查询结果就会出现bug。(不是单纯的防抖和节流就能解决问题)2,一些大文件上传,需要很久的时间,用户在中途想要终止上传问题解决:...原创 2020-04-25 17:37:05 · 6735 阅读 · 3 评论 -
js封装一个websocket
1,封装一个类import { getToken } from '@/utils/auth'const myWebsocket = process.env.VUE_APP_WebSocket_BASE_APIimport store from '@/store'import { MessageBox } from 'element-ui'class Websocket { me...原创 2019-12-09 10:21:26 · 1577 阅读 · 0 评论 -
JS中判断数据类型的方法
typeof 、instanceof、Object.prototype.toString、jQuery.type()1、typeof——返回对应的数据类型。作用:区分基本数据类型语法:typeof(变量名)例: var str = '字符串' var num = 111 var obj = {} var arr = [1,2,3] var f...原创 2019-12-19 00:27:51 · 218 阅读 · 0 评论 -
js数组循环删除元素
var arr = [111, 222, 333] for (let i = 0, len = arr.length; i < len; i++) { var item = arr[i] if (item === 111) { arr.slice(i, 1) // slice 会改变数组长度,所以要将数组长度 len 和下标 j 减一 l...原创 2019-12-18 23:10:49 · 205 阅读 · 0 评论 -
高性能数组去重——利用对象的属性不会重复这一特性
首先创建一个空对象,然后用 for 循环遍历利用对象的属性不会重复这一特性,校验数组元素是否重复function distinct(a, b) { let arr = a.concat(b) let result = [] let obj = {} for (let i of arr) { if (!obj[i]) { ...原创 2019-12-18 23:03:22 · 244 阅读 · 0 评论 -
axios 全局设置 和局部实例化设置使用
一、封装全局http请求1,封装/*** @Author: * @Date: 2019/10/14* @Description: 封装http请求* @remarks:*/import axios from 'axios'import { MessageBox, Message } from 'element-ui'import store from '@/store...原创 2019-12-18 22:01:58 · 2377 阅读 · 1 评论 -
js处理下载文件流
//exportPaperOne 是接口exportPaperOne().then(res => { const headers = res.headers const contentDisposition = headers['content-disposition'].replace(/["|']/g, '') const matched = /filename=(....原创 2019-12-18 21:44:27 · 578 阅读 · 0 评论 -
js 打开新页面在屏幕中间显示
/** * 弹出小窗口打开页面并在屏幕中间显示 * @param fileType 如 ppt、pdf、xls、word、video */ openSmallWindowOnScreenMiddle(url, name, iWidth, iHeight) { // window.screen.height获得屏幕的高,window.screen....原创 2019-12-09 13:53:58 · 573 阅读 · 0 评论 -
Element UI跨页勾选复选框
<el-table ref="chapterList" v-loading="listLoading" :data="list" border fit highlight-current-row @select-all="selectAll" @select="handleselectRow"...原创 2019-12-09 13:48:38 · 428 阅读 · 0 评论 -
vue table翻页序号累加
/** * 翻页序号 * @param index Number 列表数据下标 * @param currentPage Number 当前页码 * @param pageSize Number 每页条数 * @returns {*} Number 翻页序号 */export functi...原创 2019-12-09 13:23:30 · 1121 阅读 · 0 评论 -
js操作cookie
转载,让我站在巨人的肩膀上/** * 这是有设定过期时间的使用示例: * @param str s20是代表20秒 h是指小时,如12小时则是:h12 d是天数,30天则:d30 * @returns {number} */function getsec (str) { var str1 = str.substring(1, str.length) ...原创 2019-01-02 12:50:01 · 175 阅读 · 0 评论 -
前端公用 util.js
/** * Parse the time to string * @param {(Object|string|number)} time * @param {string} cFormat * @returns {string} */export function parseTime(time, cFormat) { if (arguments.length === 0) {...原创 2019-01-02 12:08:00 · 2953 阅读 · 0 评论
分享