Files
2026-01-16 00:12:33 +08:00

575 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LimeShared 常用函数库
专为UI组件开发设计的轻量级工具集提供高效便捷的辅助能力
## 文档链接
📚 组件详细文档请访问以下站点:
- [常用函数库文档 - 站点1](https://limex.qcoon.cn/uts/shared.html)
- [常用函数库文档 - 站点2](https://limeui.netlify.app/uts/shared.html)
- [常用函数库文档 - 站点3](https://limeui.familyzone.top/uts/shared.html)
## 安装方法
1. 在uni-app插件市场中搜索并导入`lime-shared`
## 使用
### addUnit 添加单位
给一个值添加单位
```js
import { addUnit } from '@/uni_modules/lime-shared/addUnit'
```
```js
addUnit(100) // 输出: "100px"
addUnit("200") // 输出: "200px"
addUnit("300px") // 输出: "300px"(已经包含单位)
addUnit() // 输出: undefined值为 undefined
addUnit(null) // 输出: undefined值为 null
```
### camelCase 转驼峰
将字符串转换为 camelCase 或 PascalCase 风格的命名约定
```js
import { camelCase } from '@/uni_modules/lime-shared/camelCase'
```
```js
// 基础用法
camelCase('foo-bar-baz') // 'fooBarBaz'
camelCase('hello_world', true) // 'HelloWorld'
camelCase('data-MAP') // 'dataMap'
// 特殊分隔符处理
camelCase(' spaced words ') // 'spacedWords'
camelCase('mixed-separator_example') // 'mixedSeparatorExample'
// 边缘情况
camelCase('single') // 'single'
camelCase('', true) // ''
camelCase('alreadyCamelCase') // 'alreadycamelcase'(注意:会强制转为全小写)
// 包含数字
camelCase('api-v2-version') // 'apiV2Version'
camelCase('item3', true) // 'Item3'
// 保留原始单词结构(首字母大写会被覆盖)
camelCase('HTTP-Status-Code') // 'httpStatusCode'
camelCase('CSS-Module', true) // 'CssModule'
```
### capitalizedAmount 金额转中文
将金额转换为中文大写形式
```js
import { capitalizedAmount } from '@/uni_modules/lime-shared/capitalizedAmount'
```
```js
capitalizedAmount(123456789.12) // "壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分"
capitalizedAmount(1004.5) // "壹仟零肆元伍角"
capitalizedAmount(0.45) // "肆角伍分"
capitalizedAmount(null) // "不是有效的金额!"
capitalizedAmount(10e11) // "计算金额过大!"
capitalizedAmount('12,345.6') // "壹万贰仟叁佰肆拾伍元陆角整"
```
### clamp 限制值
限制值函数, 将一个值限制在指定的范围内
```js
import { clamp } from '@/uni_modules/lime-shared/clamp'
```
```js
// 示例1限制值在0和5之间输入值10超出上限返回上限5
clamp(10, 0, 5); // 输出5
// 示例2限制值在-1和1之间输入值-3低于下限返回下限-1
clamp(-3, -1, 1); // 输出:-1
// 示例3限制值在5和10之间输入值7在范围内返回原值7
clamp(7, 5, 10); // 输出7
// 示例4限制值在20和30之间输入值15低于下限返回下限20
clamp(15, 20, 30); // 输出20
// 示例5限制值在0和100之间输入值50在范围内返回原值50
clamp(50, 0, 100); // 输出50
```
### closest 寻找接近值
寻找最接近的值函数, 在给定数组中找到最接近目标数字的元素。
```js
import { closest } from '@/uni_modules/lime-shared/closest'
```
```js
// 示例1在数组[1, 2, 3, 4, 5]中寻找最接近7的值返回5
closest([1, 2, 3, 4, 5], 7); // 输出5
// 示例2在数组[10, 20, 30, 40, 50]中寻找最接近25的值返回30
closest([10, 20, 30, 40, 50], 25); // 输出30
// 示例3在数组[-5, -3, -1, 0, 1, 3, 5]中寻找最接近-2的值返回-1
closest([-5, -3, -1, 0, 1, 3, 5], -2); // 输出:-1
// 示例4在数组[100, 200, 300, 400]中寻找最接近150的值返回100
closest([100, 200, 300, 400], 150); // 输出100
// 示例5在数组[0.1, 0.5, 1.0, 1.5, 2.0]中寻找最接近0.8的值返回0.5
closest([0.1, 0.5, 1.0, 1.5, 2.0], 0.8); // 输出0.5
```
### exif 图片信息
获取图片exif,不支持uniappx app
```js
import { exif } from '@/uni_modules/lime-shared/exif'
```
```js
uni.chooseImage({
count: 1, //最多可以选择的图片张数
sizeType: "original",
success: (res) => {
exif.getData(res.tempFiles[0], function() {
let tagj = exif.getTag(this, "GPSLongitude");
let Orientation = exif.getTag(this, 'Orientation');
console.log(tagj, Orientation)
})
}
})
```
### fillZero 数字补0
在数字前填充零,返回字符串形式的结果
```js
import { fillZero } from '@/uni_modules/lime-shared/fillZero'
```
```js
// 示例1将数字5填充到长度为2的字符串返回"05"
fillZero(5); // 输出:"05"
// 示例2将数字123填充到长度为5的字符串返回"00123"
fillZero(123, 5); // 输出:"00123"
// 示例3将数字9填充到默认长度2的字符串返回"09"
fillZero(9); // 输出:"09"
// 示例4将数字456填充到长度为3的字符串由于数字本身长度大于3返回原数字字符串"456"
fillZero(456, 3); // 输出:"456"
// 示例5将数字0填充到长度为4的字符串返回"0000"
fillZero(0, 4); // 输出:"0000"
```
### floatAdd 浮点数加法
浮点数加法,返回两个浮点数相加的结果
```js
import { floatAdd } from '@/uni_modules/lime-shared/floatAdd'
```
```js
// 示例1正确相加两个浮点数返回5.3
floatAdd(2.1, 3.2); // 输出5.3
// 示例2相加一个整数和一个浮点数返回12.02
floatAdd(10, 2.02); // 输出12.02
// 示例3相加两个浮点数其中一个有较多小数位返回0.3333
floatAdd(0.1111, 0.2222); // 输出0.3333
// 示例4传递非数字类型参数将警告并返回NaN
floatAdd('a' as any, 2.3); // 输出NaN并控制台警告
// 示例5相加两个整数返回100
floatAdd(50, 50); // 输出100
```
### floatDiv 浮点数除法
浮点数除法,除法函数,用于处理浮点数除法并保持精度。
```js
import { floatDiv } from '@/uni_modules/lime-shared/floatDiv'
```
```js
// 假设 floatMul 函数已经定义,并且正确实现了浮点数乘法
// 示例1正确相除两个浮点数返回2
floatDiv(6, 3); // 输出2
// 示例2相除两个浮点数其中一个有较多小数位返回2.5
floatDiv(5, 2); // 输出2.5
// 示例3传递非数字类型参数将警告并返回NaN
floatDiv('a' as any, 2); // 输出NaN并控制台警告
// 示例4相除两个浮点数其中一个为0将返回Infinity
floatDiv(10, 0); // 输出Infinity
// 示例5相除两个浮点数返回0.6666666666666666
floatDiv(2, 3); // 输出0.6666666666666666
```
### floatMul 浮点数乘法
浮点数乘法,用于处理浮点数乘法并保持精度。
```js
import { floatMul } from '@/uni_modules/lime-shared/floatMul'
```
```js
// 示例1正确相乘两个浮点数返回8
floatMul(2.0, 4.0); // 输出8
// 示例2相乘两个浮点数其中一个有小数返回7.5
floatMul(3.0, 2.5); // 输出7.5
// 示例3传递非数字类型参数将警告并返回NaN
floatMul('a' as any, 2.0); // 输出NaN并控制台警告
// 示例4相乘两个浮点数其中一个为0将返回0
floatMul(0, 10.123); // 输出0
// 示例5相乘两个浮点数返回0.333
floatMul(1/3, 1); // 输出0.3333333333333333,但实际结果可能因精度问题而略有不同
```
### floatSub 浮点数减法
浮点数减法,用于处理浮点数减法并保持精度。
```js
import { floatSub } from '@/uni_modules/lime-shared/floatSub'
```
```js
// 示例1正确相减两个浮点数返回2
floatSub(5.0, 3.0); // 输出2
// 示例2相减两个浮点数其中一个有小数返回0.5
floatSub(3.5, 3.0); // 输出0.5
// 示例3传递非数字类型参数将警告并返回NaN
floatSub('a' as any, 2.0); // 输出NaN并控制台警告
// 示例4相减两个浮点数其中一个为0将返回另一个数的相反数
floatSub(0, 10.123); // 输出:-10.123
// 示例5相减两个浮点数返回-0.333
floatSub(1.0, 4/3); // 输出:-0.3333333333333333,但实际结果可能因精度问题而略有不同
```
### getRect 获取元素尺寸
获取节点信息
```js
import { getRect, getAllRect } from '@/uni_modules/lime-shared/getRect'
```
```js
// * @param selector 选择器字符串
// * @param context ComponentInternalInstance 对象
// * @param node 是否获取node
// * @returns 包含节点信息的 Promise 对象
getRect('#id', this).then((res:DOMRect) => {})
getAllRect('#id', this).then((res:DOMRect) => {})
```
### isNumber 是否数值
检查一个值是否为数字类型
```js
import { isNumber } from '@/uni_modules/lime-shared/isNumber'
```
```js
// 示例1检查数字42返回true
isNumber(42); // 输出true
// 示例2检查字符串"42"返回false因为函数当前实现不处理字符串
isNumber("42"); // 输出false
// 示例3检查NaN返回false
isNumber(NaN); // 输出false
// 示例4检查null返回false
isNumber(null); // 输出false
// 示例5检查undefined返回false
isNumber(undefined); // 输出false
// 示例6检查空字符串返回false
isNumber(""); // 输出false
// 示例7检查包含数字的字符串"123abc"返回false
isNumber("123abc"); // 输出false
```
### isNumeric 是否数值字符
检查一个值是否为数字类型或表示数字的字符串
```js
import { isNumeric } from '@/uni_modules/lime-shared/isNumeric'
```
```js
// 示例1检查数字42返回true
isNumeric(42); // 输出true
// 示例2检查字符串"42"返回true
isNumeric("42"); // 输出true
// 示例3检查字符串"3.14"返回true
isNumeric("3.14"); // 输出true
// 示例4检查负数字符串"-42"返回true
isNumeric("-42"); // 输出true
// 示例5检查NaN返回false
isNumeric(NaN); // 输出false
// 示例6检查null返回false
isNumeric(null); // 输出false
// 示例7检查undefined返回false
isNumeric(undefined); // 输出false
// 示例8检查空字符串返回false
isNumeric(""); // 输出false
// 示例9检查包含数字的字符串"123abc"返回false
isNumeric("123abc"); // 输出false
// 示例10检查只包含小数点的字符串".", 返回false
isNumeric("."); // 输出false
// 示例11检查只包含负号的字符串"-", 返回false
isNumeric("-"); // 输出false
```
### kebabCase 连字符格式
将字符串转换为指定连接符的命名约定
```js
import { kebabCase } from '@/uni_modules/lime-shared/kebabCase'
```
```js
// 示例1将CamelCase字符串转换为连字符格式默认分隔符为"-"
kebabCase("camelCaseString"); // 输出camel-case-string
// 示例2将PascalCase字符串转换为连字符格式指定分隔符为"_"
kebabCase("PascalCaseString", "_"); // 输出pascal_case_string
// 示例3将字符串中已有的空格和下划线替换为连字符
kebabCase("This is a test_string"); // 输出this-is-a-test-string
// 示例4处理已经包含连字符的字符串避免重复的连字符
kebabCase("already-kabab-case"); // 输出already-kabab-case
// 示例5处理字符串开头和结尾的连字符
kebabCase("-start-end-"); // 输出start-end
// 示例6处理全大写的字符串
kebabCase("HTTPERROR404"); // 输出http-error404
```
### raf 动画帧函数
请求动画帧函数
```js
import { raf, cancelRaf, doubleRaf } from '@/uni_modules/lime-shared/raf'
```
```js
// 示例1使用 raf 函数在Web环境中请求动画帧
raf(() => {
console.log('动画帧执行');
});
// 示例2使用 cancelRaf 函数取消动画帧
const frameId = raf(() => {
console.log('这个动画帧将被取消');
});
cancelRaf(frameId);
// 示例3使用 doubleRaf 函数实现双倍动画帧效果
doubleRaf(() => {
console.log('双倍动画帧执行');
});
```
### random 随机数
生成一个指定范围内的随机数
```js
import { random } from '@/uni_modules/lime-shared/random'
```
```js
// 示例1生成一个介于0到100之间的随机整数
random(0, 100); // 输出一个0到100之间的随机整数
// 示例2生成一个介于50到100之间的随机整数
random(50, 100); // 输出一个50到100之间的随机整数
// 示例3生成一个介于0到1之间的随机数并保留两位小数
random(0, 1, 2); // 输出一个0到1之间的随机数例如0.12
// 示例4生成一个介于10到20之间的随机整数
random(10, 20); // 输出一个10到20之间的随机整数
// 示例5生成一个介于0到10之间的随机数并保留一位小数
random(0, 10, 1); // 输出一个0到10之间的随机数例如3.4
```
### range 范围数组
生成一个数字范围的数组
```js
import { range } from '@/uni_modules/lime-shared/range'
```
```js
// 示例1生成一个从 0 到 9 的数组
range(0, 10); // 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 示例2生成一个从 1 到 10 的数组,步长为 2
range(1, 11, 2); // 输出:[1, 3, 5, 7, 9]
// 示例3生成一个从 10 到 1 的数组,步长为 -1从右侧开始填充
range(10, 0, -1, true); // 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
// 示例4生成一个从 0 到 5 的数组,步长为 1从右侧开始填充
range(0, 6, 1, true); // 输出:[5, 4, 3, 2, 1, 0]
```
### shuffle 数组洗牌
随机化数组中元素的顺序,使用 Fisher-Yates 算法
```js
import { shuffle } from '@/uni_modules/lime-shared/shuffle'
```
```js
// 示例1对数字数组进行洗牌
const numbers = [1, 2, 3, 4, 5];
console.log(shuffle(numbers)); // 输出:[3, 1, 4, 5, 2] (示例输出,实际结果随机)
// 示例2对字符串数组进行洗牌
const strings = ['apple', 'banana', 'cherry'];
console.log(shuffle(strings)); // 输出:['banana', 'cherry', 'apple'] (示例输出,实际结果随机)
// 示例3对对象数组进行洗牌
const objects = [{ id: 1 }, { id: 2 }, { id: 3 }];
console.log(shuffle(objects)); // 输出:[{ id: 3 }, { id: 1 }, { id: 2 }] (示例输出,实际结果随机)
```
### sleep 延迟函数
延迟指定时间后解析的 Promise
```js
import { sleep } from '@/uni_modules/lime-shared/sleep'
```
```js
// 示例1使用默认延迟时间300毫秒
async function example1() {
console.log('开始延迟');
await sleep(); // 使用默认的300毫秒延迟
console.log('延迟结束');
}
example1();
// 示例2指定延迟时间为1000毫秒1秒
async function example2() {
console.log('开始1秒延迟');
await sleep(1000); // 指定1000毫秒延迟
console.log('1秒延迟结束');
}
example2();
// 示例3在异步函数中使用sleep来暂停执行
async function example3() {
for (let i = 0; i < 5; i++) {
console.log(`计数:${i}`);
await sleep(500); // 每500毫秒打印一次计数
}
}
example3();
```
### unitConvert 单位转数值
单位转换函数,将字符串数字或带有单位的字符串转换为数字
```js
import { unitConvert } from '@/uni_modules/lime-shared/unitConvert'
```
```js
// 示例1将字符串数字'100'转换为数字100
console.log(unitConvert('100')); // 输出100
// 示例2将带有'px'单位的字符串'20px'转换为数字20
console.log(unitConvert('20px')); // 输出20
// 示例3将带有'rpx'单位的字符串'100rpx'转换为像素值需要uni.upx2px函数支持
console.log(unitConvert('100rpx')); // 输出200假设uni.upx2px返回2倍值
// 示例4将带有'%'单位的字符串'50%'转换为基于基准值200的像素值
console.log(unitConvert('50%', 200)); // 输出100
// 示例5传入null返回0
console.log(unitConvert(null)); // 输出0
// 示例6传入undefined返回0
console.log(unitConvert(undefined)); // 输出0
// 示例7传入数字10直接返回10
console.log(unitConvert(10)); // 输出10
```