nemoni-js-utils
v2.1.3
Published
common utils for js
Readme
目录
JS Utils 工具函数库
基础工具函数 (base.js)
getTypeOf(params)
获取数据类型
- 参数: 任意类型的值
- 返回: 返回数据类型字符串,如 'String','Number'等
- 示例:
getTypeOf([1,2,3]) // 'Array'
unique(params)
数组或字符串去重
- 参数: Array或String
- 返回: 去重后的数组或字符串
- 示例:
unique([1,1,2,3]) // [1,2,3]
deepCopy(obj)
深拷贝对象或数组
- 参数: 需要深拷贝的对象或数组
- 返回: 深拷贝后的新对象或数组
- 示例:
deepCopy({a:1, b:{c:2}}) // 返回全新对象
getWHForVideoOrImg(file)
获取图片或视频的宽高
- 参数: 单个文件对象(图片或视频)
- 返回: Promise对象,resolve时返回包含width和height的对象
- 示例:
await getWHForVideoOrImg(file) // {width: 1920, height: 1080}
getUserNameByteLength(str, nameStrLimit, maxByteLength, returnByteLength)
计算字符串字节长度,可选择截断
- 参数:
- str: 目标字符串
- nameStrLimit: 字符长度限制(默认7)
- maxByteLength: 字节长度限制(默认21)
- returnByteLength: 是否返回字节长度(默认false)
- 返回: 截断后的字符串或字节长度
- 示例:
getUserNameByteLength("你好世界", 3) // "你好世..."
guid(short)
生成唯一标识符
- 参数: short - 是否生成短格式(默认false)
- 返回: 唯一标识字符串
- 示例:
guid() // "a1b2c3d4-e5f6-g7h8-i9j0"
executeFunctions(call, token, tokenName)
执行函数或函数数组,支持token验证和延迟执行
- 参数:
- call: 需要执行的函数或函数数组
- token: 可选的token参数
- tokenName: token的名称(默认'sso')
- 示例:
executeFunctions(() => console.log('执行'), 'token123')
launchMiniProgram(options)
拉起微信小程序
- 参数: 配置对象
- 返回: boolean
- 示例:
launchMiniProgram({userName: 'wx1234567890'}) // true
getOpenId(code)
获取微信openID
- 参数: 微信授权后的code码
- 返回: Promise对象,resolve时返回openid
- 示例:
await getOpenId('code1234567890') // 'openid1234567890'
环境检测工具 (charge.js)
isweixin
检测是否在微信环境中
- 返回: Boolean
isuc
检测是否在UC浏览器中
- 返回: Boolean
isandroid
检测是否在Android系统中
- 返回: Boolean
isios
检测是否在iOS系统中
- 返回: Boolean
getType(obj)
判断传入对象的数据类型
- 参数: 需要判断类型的对象
- 返回: 数据类型字符串
- 示例:
getType([]) // 'Array'
getMarketUrl(appId, defaultUrl)
根据手机品牌返回对应的应用市场链接
- 参数:
- appId: 应用包名(默认'com.youdao.hlyd')
- defaultUrl: 默认下载链接
- 返回: 对应品牌手机应用市场链接或默认下载链接
- 支持品牌: 华为、荣耀、vivo、小米、OPPO、联想、魅族等
数据验证工具 (validate.js)
validateUsername(username)
验证用户名
- 参数: 用户名
- 返回: 包含valid和message的对象
- 示例:
validateUsername('user123') // {valid: false, message: '用户名必须包含字母、数字和下划线'}
validatePassword(password)
验证密码
- 参数: 密码
- 返回: 包含valid、strength和message的对象
- 示例:
validatePassword('Test123!@#') // {valid: true, strength: 7, message: '密码强度: 强'}
validateEmail(email)
验证邮箱
- 参数: 邮箱
- 返回: 包含valid和message的对象
- 示例:
validateEmail('[email protected]') // {valid: true, message: ''}
mobileCheck(mobile)
验证手机号
- 参数: 手机号
- 返回: boolean
- 示例:
mobileCheck('13912345678') // true
idCardCheck(idCard)
验证身份证号码
- 参数: 身份证号码
- 返回: boolean
- 示例:
idCardCheck('110101199003077758') // true
validateIdCard(idCard)
校验身份证号码并返回详细验证结果
- 参数: 身份证号码
- 返回: 包含valid和message的对象
- 示例:
validateIdCard('110101199003077758') // {valid: true, message: ''}
微信工具函数 (wechat.js)
getOpenId(code)
获取微信openID
- 参数: 微信授权后的code码
- 返回: Promise对象,resolve时返回openid
- 示例:
await getOpenId('code1234567890') // 'openid1234567890'
navigateTo(url, options)
微信内跳转页面
- 参数:
- url: 需要跳转的URL地址
- options: 配置选项
- 返回: void
- 示例:
navigateTo('https://example.com') // 无返回
跨页面通信 (websocket.js)
// 使用Demo export const demoUsage = { /**
- 测试跨页面通信 */ testCrossPageCommunication() { if (!crossPageCommunication.isSupported()) { console.log('当前浏览器不支持跨页面通信'); return; }
// 监听消息
crossPageCommunication.onMessage('demo-channel', (data, metadata) => {
console.log('收到消息:', data);
console.log('消息来源:', metadata.origin);
console.log('接收时间:', new Date(metadata.timestamp).toLocaleTimeString());
// 在页面上显示消息
this.displayMessage(data);
});
// 发送测试消息
let messageCount = 0;
const sendTestMessage = () => {
const message = {
type: 'test',
content: `测试消息 ${++messageCount}`,
from: 'Demo Page',
time: new Date().toLocaleTimeString()
};
const success = crossPageCommunication.postMessage('demo-channel', message);
if (success) {
console.log('消息发送成功:', message);
} else {
console.log('消息发送失败');
}
};
// 每5秒发送一条测试消息
setInterval(sendTestMessage, 5000);
// 立即发送第一条消息
setTimeout(sendTestMessage, 1000);},
/**
- 显示消息到页面
*/
displayMessage(data) {
// 在实际项目中,这里可以将消息显示到页面上的某个元素中
const messageDiv = document.createElement('div');
messageDiv.style.cssText =
padding: 8px; margin: 4px; background: #f0f0f0; border-left: 3px solid #007bff; font-family: Arial, sans-serif;; messageDiv.innerHTML =<strong>${data.from}</strong>: ${data.content} <br><small>${data.time}</small>;
const container = document.getElementById('message-container') || this.createMessageContainer();
container.appendChild(messageDiv);
container.scrollTop = container.scrollHeight;},
/**
- 创建消息容器
*/
createMessageContainer() {
const container = document.createElement('div');
container.id = 'message-container';
container.style.cssText =
position: fixed; top: 10px; right: 10px; width: 300px; height: 400px; background: white; border: 1px solid #ccc; padding: 10px; overflow-y: auto; z-index: 1000; box-shadow: 0 2px 10px rgba(0,0,0,0.1);; document.body.appendChild(container); return container; },
/**
- 多标签页同步示例 */ multiTabSyncExample() { // 用户登录状态同步 crossPageCommunication.onMessage('auth-sync', (data) => { if (data.type === 'login') { console.log('用户在其他标签页登录:', data.user); this.updateUserStatus(data.user, true); } else if (data.type === 'logout') { console.log('用户在其他标签页登出'); this.updateUserStatus(null, false); } });
// 数据变更同步
crossPageCommunication.onMessage('data-sync', (data) => {
console.log('数据在其他标签页被更新:', data);
this.refreshData(data);
});} };
// 初始化Demo方法
demoUsage.updateUserStatus = function(user, isLoggedIn) {
console.log(用户状态更新: ${user} - ${isLoggedIn ? '已登录' : '已登出'});
};
demoUsage.refreshData = function(data) { console.log('刷新数据:', data); };
