js原生功能 复制粘贴 (支持pc端及移动端)
//方法一
/*
* 功能:js复制粘贴
* @text 需要复制的内容
* @sucTip 复制成功后提示问题
* @isTip 是否有提示 默认有提示
*/
export function copyText({text,sucTip,isTip=true} = {}) {
let element = document.createElement('input');
element.value = text;
element.style.position = 'fixed';
element.style.left = '-100%';
element.style.top = '-100%';
document.body.appendChild(element);
element.select(); // 选中文本
document.execCommand("copy"); // 执行浏览器复制命令
document.body.removeChild(element);
if(isTip){
window.alert(sucTip?sucTip:'复制成功')
}
}
//方法二
/*
将文本复制到剪贴板非常有用,也是一个很难解决的问题。您可以在Internet上找到各种解决方案,但是下面的解决方案可能是最小,最聪明的解决方案之一。
*/
export function copyTextToClipboard = async (text) => {
await navigator.clipboard.writeText(text)
}
js取得一个区间的随机整数
/*
* 功能:取得一个区间的随机整数
* @n 最小值
* @m 最大值
*/
export function rnd(n, m){
var random = Math.floor(Math.random()*(m-n+1)+n);
return random;
}
js在移动端时用了点击事件,但是在滑动页面时,总是会被触发
/*
* 功能:在移动端时用了点击事件,但是在滑动页面时,总是会被触发
* @ele 生效容器
*/
export function addEvent({ele} = {}) {
let locked = false;
let dom = document.querySelector(ele);
if(!dom) return false
dom.addEventListener('touchmove', function(ev){
locked || (locked = true, dom.addEventListener('touchend', stopTouchendPropagation, true));
}, true);
function stopTouchendPropagation(ev){
ev.stopPropagation();
dom.removeEventListener('touchend', stopTouchendPropagation, true);
locked = false;
}
}
#这里加上容器限制是因为,如果作用全局的话会影响其他插件的工具,比如下拉刷新等插件
js记录工作中常用到的的正则表达
/**
* 功 能:正则表达
*/
export const regularExpression = {
r1: /^([+-]?d+.d{0,4})$|^(d+)$/i,//只允许输入整数或者最多4位小数
http:/((http|ftp|https)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?)|((www).[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?)/,//支持http,https,www开头的地址 }
js腾讯QQ表情
/* * 功能:表情配置 */
export const emotionParams = {
list: ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈', '磕头', '回头', '跳绳', '挥手', '激动', '街舞', '献吻', '左太极', '右太极'],
url: 'https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/',//腾讯gif图地址
}
#使用 https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/0.gif //数组索引即表情顺序 微笑 撇嘴 ...
js获取地址栏参数
/**
* 功能:获取地址栏参数
* @name 参数名称
* */
export function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
js函数防抖
/**
* 功能: 防抖
* @fn:函数名
* @wait:函数执行频率
*
* */
export function debounce(fn, wait) {
var timeout = null;
return function () {
if (timeout !== null) clearTimeout(timeout);
timeout = setTimeout(fn, wait);
}
}
js 动态加载js并且执行
/**
* 功能:动态加载js并且执行
* @url :需要插入的js
* */
export const loadJs = function (url) {
return new Promise((resolve, reject) => {
//防止定制为空代码报错
if (!url) {
reject();
return
}
//防止重复插入
let scripts = document.querySelectorAll('script');
for (let i = 0; i < scripts.length; i++) {
if (scripts[i].src === url) {
resolve();
return
}
}
//运行JS
$.getScript(url).done(() => {
let script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.body.appendChild(script)
resolve();
}).fail(() => {
reject();
});
})
}
js 动态加载css并且执行
/**
* 功能:动态加载css并且执行
* @url: 需要动态插入的css
* */
export const loadCss = function (url) {
return new Promise((resolve, reject) => {
//防止定制为空代码报错
if (!url) {
reject();
return
}
//防止重复插入
let links = document.querySelectorAll('link');
for (let i = 0; i < links.length; i++) {
if (links[i].href === url) {
resolve();
return
}
}
//插入节点
let link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = url;
document.head.appendChild(link);
resolve();
})
}
js H5与APP(安卓及IOS)交互方法
/**
* 功能:H5与APP(安卓及IOS)交互方法
* @fn: 方法名
* @params: 参数 适用于 ios是对象类型 安卓是正常参数类型 或者自己修改
* */
export const dispatchAppFn = function ({fn, params} = {}) {
var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if (isAndroid) {
let androidParams = ''
for (let key in params) {
androidParams += `"${params[key]}",`;
}
if (androidParams.length) {
let params = androidParams.substring(0, androidParams.length - 1);
eval(`window[fn].postMessage(${params})`)
} else {
window[fn].postMessage();
}
} else if (isiOS) {
window.webkit.messageHandlers[fn].postMessage(params);
}
}
js 时间格式化任意格式
/**
* 功能:时间格式化任意格式
* @date: 时间 默认是当日
* @fmt: 输出时间格式 默认是 yyyy-MM-dd
* 注:月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
*/
export const formatDate = function ({date = new Date(), fmt = 'yyyy-MM-dd'} = {}) {
let _date = new Date(date)
var o = {
"M+": _date.getMonth() + 1, //月份
"d+": _date.getDate(), //日
"h+": _date.getHours(), //小时
"m+": _date.getMinutes(), //分
"s+": _date.getSeconds(), //秒
"q+": Math.floor((_date.getMonth() + 3) / 3), //季度
"S": _date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (_date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
js 计算字符的长度
/**
* 功能:计算字符的长度
* @fData:需要计算的数据
* 出口参数:返回fData的长度(Unicode长度为2,非Unicode长度为1)
**/
export function byteLen(data) {
let len = 0
for (let i = 0; i < data.length; i++) {
if ((data.charCodeAt(i) < 0) || (data.charCodeAt(i) > 255)) {
len = len + 2
} else {
len = len + 1
}
}
return len
}
js 文字截取
/**
* 功能:文字截取
* @str: 文字内容
* @len: 需要截取的文字长度
* 注:(Unicode长度为2,非Unicode长度为1)
* */
export function beautySub(str, len) {
let n = 0;
let newStr = '';
for (let i = 0; i < str.length; i++) {
if ((str.charCodeAt(i) < 0) || (str.charCodeAt(i) > 255)) {
n += 2;
} else {
n += 1;
}
if (n > len) {
return newStr
} else {
newStr += str[i]
}
}
}
移动端加入console调试信息
if((location.href || '').indexOf('vconsole=true') > -1) {
document.write('<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script>');
document.write('<script>new VConsole()</script>');
}
借助 Math.pow() 你可以将数字截断为某个小数点的方法。
const toFixed = (n, fixed) => ~~(Math.pow(10, fixed) * n) / Math.pow(10, fixed); ----------------------------------------------------------------- toFixed(25.198726354, 1); // 25.1 toFixed(25.198726354, 2); // 25.19 toFixed(25.198726354, 3); // 25.198 toFixed(25.198726354, 4); // 25.1987 toFixed(25.198726354, 5); // 25.19872 toFixed(25.198726354, 6); // 25.198726
删除HTML标签
//这种单行代码使用正则表达式删除了任何看起来像 <xxx> 的字符串,其中 x 可以是任何字符,包括 "<b>A</b>".replace(/<[^>]+>/gi, ""); //A
随机ID生成
//当你在进行原型设计并需要唯一的id时,这可以成为你的首选功能。 const a = Math.random().toString(36).substring(2); console.log(a) //72pklaoe38u