Skip to content

LimeShared 常用函数库

专为UI组件开发设计的轻量级工具集,提供高效便捷的辅助能力

文档链接

📚 组件详细文档请访问以下站点:

安装方法

  1. 在uni-app插件市场入口 中搜索并导入LimeShared

使用

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

源代码

组件源码