@tanwan/utils 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/addClass.cjs +19 -0
- package/dist/addClass.d.cts +16 -0
- package/dist/addClass.d.ts +17 -0
- package/dist/addClass.js +19 -0
- package/dist/{string/camelCase.cjs → camelCase.cjs} +0 -1
- package/dist/{string/camelCase.d.cts → camelCase.d.cts} +1 -2
- package/dist/{string/camelCase.d.ts → camelCase.d.ts} +1 -2
- package/dist/{string/camelCase.js → camelCase.js} +0 -3
- package/dist/{string/capitalize.cjs → capitalize.cjs} +1 -1
- package/dist/{string/capitalize.d.cts → capitalize.d.cts} +2 -3
- package/dist/{string/capitalize.d.ts → capitalize.d.ts} +2 -3
- package/dist/{string/capitalize.js → capitalize.js} +1 -3
- package/dist/{array/chunk.cjs → chunk.cjs} +1 -1
- package/dist/{array/chunk.d.cts → chunk.d.cts} +2 -3
- package/dist/{array/chunk.d.ts → chunk.d.ts} +2 -3
- package/dist/{array/chunk.js → chunk.js} +1 -3
- package/dist/{number/clamp.cjs → clamp.cjs} +1 -1
- package/dist/{number/clamp.d.cts → clamp.d.cts} +2 -3
- package/dist/{number/clamp.d.ts → clamp.d.ts} +2 -3
- package/dist/{number/clamp.js → clamp.js} +1 -3
- package/dist/convertCurrencyToChinese.cjs +56 -0
- package/dist/convertCurrencyToChinese.d.cts +18 -0
- package/dist/convertCurrencyToChinese.d.ts +19 -0
- package/dist/convertCurrencyToChinese.js +56 -0
- package/dist/copyToClipboard.cjs +38 -0
- package/dist/copyToClipboard.d.cts +17 -0
- package/dist/copyToClipboard.d.ts +18 -0
- package/dist/copyToClipboard.js +38 -0
- package/dist/createElement.cjs +27 -0
- package/dist/createElement.d.cts +21 -0
- package/dist/createElement.d.ts +22 -0
- package/dist/createElement.js +27 -0
- package/dist/{function/debounce.cjs → debounce.cjs} +1 -1
- package/dist/{function/debounce.d.cts → debounce.d.cts} +2 -3
- package/dist/{function/debounce.d.ts → debounce.d.ts} +2 -3
- package/dist/{function/debounce.js → debounce.js} +1 -3
- package/dist/debounceSubmit.cjs +34 -0
- package/dist/debounceSubmit.d.cts +22 -0
- package/dist/debounceSubmit.d.ts +23 -0
- package/dist/debounceSubmit.js +34 -0
- package/dist/decodeBase64.cjs +19 -0
- package/dist/decodeBase64.d.cts +16 -0
- package/dist/decodeBase64.d.ts +17 -0
- package/dist/decodeBase64.js +19 -0
- package/dist/{base/deepClone.cjs → deepClone.cjs} +3 -3
- package/dist/{base/deepClone.d.cts → deepClone.d.cts} +2 -3
- package/dist/{base/deepClone.d.ts → deepClone.d.ts} +2 -3
- package/dist/{base/deepClone.js → deepClone.js} +1 -3
- package/dist/deepMerge.cjs +39 -0
- package/dist/deepMerge.d.cts +25 -0
- package/dist/deepMerge.d.ts +26 -0
- package/dist/deepMerge.js +39 -0
- package/dist/delay.cjs +8 -0
- package/dist/delay.d.cts +18 -0
- package/dist/delay.d.ts +19 -0
- package/dist/delay.js +8 -0
- package/dist/difference.cjs +24 -0
- package/dist/difference.d.cts +20 -0
- package/dist/difference.d.ts +21 -0
- package/dist/difference.js +24 -0
- package/dist/downloadFile.cjs +31 -0
- package/dist/downloadFile.d.cts +20 -0
- package/dist/downloadFile.d.ts +21 -0
- package/dist/downloadFile.js +31 -0
- package/dist/encodeBase64.cjs +20 -0
- package/dist/encodeBase64.d.cts +17 -0
- package/dist/encodeBase64.d.ts +18 -0
- package/dist/encodeBase64.js +20 -0
- package/dist/{array/flatten.cjs → flatten.cjs} +1 -1
- package/dist/{array/flatten.d.cts → flatten.d.cts} +2 -3
- package/dist/{array/flatten.d.ts → flatten.d.ts} +2 -3
- package/dist/{array/flatten.js → flatten.js} +1 -3
- package/dist/formatBankCard.cjs +19 -0
- package/dist/formatBankCard.d.cts +16 -0
- package/dist/formatBankCard.d.ts +17 -0
- package/dist/formatBankCard.js +19 -0
- package/dist/formatCurrency.cjs +7 -0
- package/dist/formatCurrency.d.cts +27 -0
- package/dist/formatCurrency.d.ts +28 -0
- package/dist/formatCurrency.js +7 -0
- package/dist/{date/formatDate.cjs → formatDate.cjs} +1 -1
- package/dist/{date/formatDate.d.cts → formatDate.d.cts} +2 -3
- package/dist/{date/formatDate.d.ts → formatDate.d.ts} +2 -3
- package/dist/{date/formatDate.js → formatDate.js} +1 -3
- package/dist/formatFileSize.cjs +33 -0
- package/dist/formatFileSize.d.cts +19 -0
- package/dist/formatFileSize.d.ts +20 -0
- package/dist/formatFileSize.js +33 -0
- package/dist/formatIdCard.cjs +21 -0
- package/dist/formatIdCard.d.cts +17 -0
- package/dist/formatIdCard.d.ts +18 -0
- package/dist/formatIdCard.js +21 -0
- package/dist/formatPhone.cjs +21 -0
- package/dist/formatPhone.d.cts +17 -0
- package/dist/formatPhone.d.ts +18 -0
- package/dist/formatPhone.js +21 -0
- package/dist/{number/formatThousands.cjs → formatThousands.cjs} +1 -1
- package/dist/{number/formatThousands.d.cts → formatThousands.d.cts} +2 -3
- package/dist/{number/formatThousands.d.ts → formatThousands.d.ts} +2 -3
- package/dist/{number/formatThousands.js → formatThousands.js} +1 -3
- package/dist/generateCode.cjs +29 -0
- package/dist/generateCode.d.cts +19 -0
- package/dist/generateCode.d.ts +20 -0
- package/dist/generateCode.js +29 -0
- package/dist/getAge.cjs +30 -0
- package/dist/getAge.d.cts +18 -0
- package/dist/getAge.d.ts +19 -0
- package/dist/getAge.js +30 -0
- package/dist/getByPath.cjs +29 -0
- package/dist/getByPath.d.cts +20 -0
- package/dist/getByPath.d.ts +21 -0
- package/dist/getByPath.js +29 -0
- package/dist/getCssVar.cjs +22 -0
- package/dist/getCssVar.d.cts +18 -0
- package/dist/getCssVar.d.ts +19 -0
- package/dist/getCssVar.js +22 -0
- package/dist/{date/getRelativeTime.cjs → getRelativeTime.cjs} +1 -1
- package/dist/{date/getRelativeTime.d.cts → getRelativeTime.d.cts} +2 -3
- package/dist/{date/getRelativeTime.d.ts → getRelativeTime.d.ts} +2 -3
- package/dist/{date/getRelativeTime.js → getRelativeTime.js} +1 -3
- package/dist/getScrollTop.cjs +28 -0
- package/dist/getScrollTop.d.cts +18 -0
- package/dist/getScrollTop.d.ts +19 -0
- package/dist/getScrollTop.js +28 -0
- package/dist/getStorage.cjs +27 -0
- package/dist/getStorage.d.cts +18 -0
- package/dist/getStorage.d.ts +19 -0
- package/dist/getStorage.js +27 -0
- package/dist/getStyle.cjs +20 -0
- package/dist/getStyle.d.cts +17 -0
- package/dist/getStyle.d.ts +18 -0
- package/dist/getStyle.js +20 -0
- package/dist/getTextWidth.cjs +26 -0
- package/dist/getTextWidth.d.cts +16 -0
- package/dist/getTextWidth.d.ts +17 -0
- package/dist/getTextWidth.js +26 -0
- package/dist/groupBy.cjs +36 -0
- package/dist/groupBy.d.cts +26 -0
- package/dist/groupBy.d.ts +27 -0
- package/dist/groupBy.js +36 -0
- package/dist/hasClass.cjs +19 -0
- package/dist/hasClass.d.cts +16 -0
- package/dist/hasClass.d.ts +17 -0
- package/dist/hasClass.js +19 -0
- package/dist/index.cjs +180 -36
- package/dist/index.d.cts +91 -19
- package/dist/index.d.ts +91 -19
- package/dist/index.iife.js +1 -1
- package/dist/index.js +91 -19
- package/dist/insertAfter.cjs +19 -0
- package/dist/insertAfter.d.cts +15 -0
- package/dist/insertAfter.d.ts +16 -0
- package/dist/insertAfter.js +19 -0
- package/dist/intersection.cjs +24 -0
- package/dist/intersection.d.cts +20 -0
- package/dist/intersection.d.ts +21 -0
- package/dist/intersection.js +24 -0
- package/dist/invert.cjs +21 -0
- package/dist/invert.d.cts +16 -0
- package/dist/invert.d.ts +17 -0
- package/dist/invert.js +21 -0
- package/dist/{base/isArray.cjs → isArray.cjs} +1 -1
- package/dist/{base/isArray.d.cts → isArray.d.cts} +2 -3
- package/dist/{base/isArray.d.ts → isArray.d.ts} +2 -3
- package/dist/{base/isArray.js → isArray.js} +1 -3
- package/dist/isBrowser.cjs +17 -0
- package/dist/isBrowser.d.cts +14 -0
- package/dist/isBrowser.d.ts +15 -0
- package/dist/isBrowser.js +17 -0
- package/dist/isDate.cjs +18 -0
- package/dist/isDate.d.cts +15 -0
- package/dist/isDate.d.ts +16 -0
- package/dist/isDate.js +18 -0
- package/dist/isEmpty.cjs +42 -0
- package/dist/isEmpty.d.cts +33 -0
- package/dist/isEmpty.d.ts +34 -0
- package/dist/isEmpty.js +42 -0
- package/dist/isFunction.cjs +19 -0
- package/dist/isFunction.d.cts +16 -0
- package/dist/isFunction.d.ts +17 -0
- package/dist/isFunction.js +19 -0
- package/dist/isInViewport.cjs +22 -0
- package/dist/isInViewport.d.cts +17 -0
- package/dist/isInViewport.d.ts +18 -0
- package/dist/isInViewport.js +22 -0
- package/dist/isNil.cjs +19 -0
- package/dist/isNil.d.cts +16 -0
- package/dist/isNil.d.ts +17 -0
- package/dist/isNil.js +19 -0
- package/dist/isNumber.cjs +19 -0
- package/dist/isNumber.d.cts +16 -0
- package/dist/isNumber.d.ts +17 -0
- package/dist/isNumber.js +19 -0
- package/dist/{base/isObject.cjs → isObject.cjs} +1 -1
- package/dist/{base/isObject.d.cts → isObject.d.cts} +2 -3
- package/dist/{base/isObject.d.ts → isObject.d.ts} +2 -3
- package/dist/{base/isObject.js → isObject.js} +1 -3
- package/dist/isPrimitive.cjs +21 -0
- package/dist/isPrimitive.d.cts +18 -0
- package/dist/isPrimitive.d.ts +19 -0
- package/dist/isPrimitive.js +21 -0
- package/dist/isPromise.cjs +18 -0
- package/dist/isPromise.d.cts +15 -0
- package/dist/isPromise.d.ts +16 -0
- package/dist/isPromise.js +18 -0
- package/dist/{base/isString.cjs → isString.cjs} +1 -1
- package/dist/{base/isString.d.cts → isString.d.cts} +2 -3
- package/dist/{base/isString.d.ts → isString.d.ts} +2 -3
- package/dist/{base/isString.js → isString.js} +1 -3
- package/dist/joinUrl.cjs +25 -0
- package/dist/joinUrl.d.cts +19 -0
- package/dist/joinUrl.d.ts +20 -0
- package/dist/joinUrl.js +25 -0
- package/dist/{string/kebabCase.d.cts → kebabCase.d.cts} +1 -2
- package/dist/{string/kebabCase.d.ts → kebabCase.d.ts} +1 -2
- package/dist/{string/kebabCase.js → kebabCase.js} +0 -2
- package/dist/lazyLoadImages.cjs +36 -0
- package/dist/lazyLoadImages.d.cts +19 -0
- package/dist/lazyLoadImages.d.ts +20 -0
- package/dist/lazyLoadImages.js +36 -0
- package/dist/listToTree.cjs +25 -0
- package/dist/listToTree.d.cts +32 -0
- package/dist/listToTree.d.ts +33 -0
- package/dist/listToTree.js +25 -0
- package/dist/mapValues.cjs +25 -0
- package/dist/mapValues.d.cts +20 -0
- package/dist/mapValues.d.ts +21 -0
- package/dist/mapValues.js +25 -0
- package/dist/maskString.cjs +28 -0
- package/dist/maskString.d.cts +24 -0
- package/dist/maskString.d.ts +25 -0
- package/dist/maskString.js +28 -0
- package/dist/memoize.cjs +32 -0
- package/dist/memoize.d.cts +22 -0
- package/dist/memoize.d.ts +23 -0
- package/dist/memoize.js +32 -0
- package/dist/off.cjs +22 -0
- package/dist/off.d.cts +19 -0
- package/dist/off.d.ts +20 -0
- package/dist/off.js +22 -0
- package/dist/omit.cjs +23 -0
- package/dist/omit.d.cts +17 -0
- package/dist/omit.d.ts +18 -0
- package/dist/omit.js +23 -0
- package/dist/on.cjs +21 -0
- package/dist/on.d.cts +18 -0
- package/dist/on.d.ts +19 -0
- package/dist/on.js +21 -0
- package/dist/once.cjs +31 -0
- package/dist/once.d.cts +20 -0
- package/dist/once.d.ts +21 -0
- package/dist/once.js +31 -0
- package/dist/parseQueryString.cjs +48 -0
- package/dist/parseQueryString.d.cts +21 -0
- package/dist/parseQueryString.d.ts +22 -0
- package/dist/parseQueryString.js +48 -0
- package/dist/pascalCase.cjs +18 -0
- package/dist/pascalCase.d.cts +15 -0
- package/dist/pascalCase.d.ts +16 -0
- package/dist/pascalCase.js +18 -0
- package/dist/pick.cjs +22 -0
- package/dist/pick.d.cts +17 -0
- package/dist/pick.d.ts +18 -0
- package/dist/pick.js +22 -0
- package/dist/{number/randomInt.cjs → randomInt.cjs} +1 -1
- package/dist/{number/randomInt.d.cts → randomInt.d.cts} +2 -3
- package/dist/{number/randomInt.d.ts → randomInt.d.ts} +2 -3
- package/dist/{number/randomInt.js → randomInt.js} +1 -3
- package/dist/range.cjs +27 -0
- package/dist/range.d.cts +20 -0
- package/dist/range.d.ts +21 -0
- package/dist/range.js +27 -0
- package/dist/removeClass.cjs +19 -0
- package/dist/removeClass.d.cts +16 -0
- package/dist/removeClass.d.ts +17 -0
- package/dist/removeClass.js +19 -0
- package/dist/removeElement.cjs +17 -0
- package/dist/removeElement.d.cts +14 -0
- package/dist/removeElement.d.ts +15 -0
- package/dist/removeElement.js +17 -0
- package/dist/removeStorage.cjs +19 -0
- package/dist/removeStorage.d.cts +14 -0
- package/dist/removeStorage.d.ts +15 -0
- package/dist/removeStorage.js +19 -0
- package/dist/retry.cjs +27 -0
- package/dist/retry.d.cts +17 -0
- package/dist/retry.d.ts +18 -0
- package/dist/retry.js +27 -0
- package/dist/sample.cjs +20 -0
- package/dist/sample.d.cts +16 -0
- package/dist/sample.d.ts +17 -0
- package/dist/sample.js +20 -0
- package/dist/scrollToElement.cjs +23 -0
- package/dist/scrollToElement.d.cts +16 -0
- package/dist/scrollToElement.d.ts +17 -0
- package/dist/scrollToElement.js +23 -0
- package/dist/setCssVar.cjs +22 -0
- package/dist/setCssVar.d.cts +18 -0
- package/dist/setCssVar.d.ts +19 -0
- package/dist/setCssVar.js +22 -0
- package/dist/setStorage.cjs +25 -0
- package/dist/setStorage.d.cts +17 -0
- package/dist/setStorage.d.ts +18 -0
- package/dist/setStorage.js +25 -0
- package/dist/setStyle.cjs +22 -0
- package/dist/setStyle.d.cts +19 -0
- package/dist/setStyle.d.ts +20 -0
- package/dist/setStyle.js +22 -0
- package/dist/{array/shuffle.cjs → shuffle.cjs} +1 -1
- package/dist/{array/shuffle.d.cts → shuffle.d.cts} +2 -3
- package/dist/{array/shuffle.d.ts → shuffle.d.ts} +2 -3
- package/dist/{array/shuffle.js → shuffle.js} +1 -3
- package/dist/snakeCase.cjs +18 -0
- package/dist/snakeCase.d.cts +15 -0
- package/dist/snakeCase.d.ts +16 -0
- package/dist/snakeCase.js +18 -0
- package/dist/sortBy.cjs +30 -0
- package/dist/sortBy.d.cts +20 -0
- package/dist/sortBy.d.ts +21 -0
- package/dist/sortBy.js +30 -0
- package/dist/stringifyQueryString.cjs +38 -0
- package/dist/stringifyQueryString.d.cts +21 -0
- package/dist/stringifyQueryString.d.ts +22 -0
- package/dist/stringifyQueryString.js +38 -0
- package/dist/{function/throttle.cjs → throttle.cjs} +1 -1
- package/dist/{function/throttle.d.cts → throttle.d.cts} +2 -3
- package/dist/{function/throttle.d.ts → throttle.d.ts} +2 -3
- package/dist/{function/throttle.js → throttle.js} +1 -3
- package/dist/toggleClass.cjs +22 -0
- package/dist/toggleClass.d.cts +19 -0
- package/dist/toggleClass.d.ts +20 -0
- package/dist/toggleClass.js +22 -0
- package/dist/treeFind.cjs +34 -0
- package/dist/treeFind.d.cts +25 -0
- package/dist/treeFind.d.ts +26 -0
- package/dist/treeFind.js +34 -0
- package/dist/treeToList.cjs +33 -0
- package/dist/treeToList.d.cts +24 -0
- package/dist/treeToList.d.ts +25 -0
- package/dist/treeToList.js +33 -0
- package/dist/truncate.cjs +23 -0
- package/dist/truncate.d.cts +19 -0
- package/dist/truncate.d.ts +20 -0
- package/dist/truncate.js +23 -0
- package/dist/uniqBy.cjs +30 -0
- package/dist/uniqBy.d.cts +20 -0
- package/dist/uniqBy.d.ts +21 -0
- package/dist/uniqBy.js +30 -0
- package/dist/{array/unique.cjs → unique.cjs} +1 -1
- package/dist/{array/unique.d.cts → unique.d.cts} +2 -3
- package/dist/{array/unique.d.ts → unique.d.ts} +2 -3
- package/dist/{array/unique.js → unique.js} +1 -3
- package/dist/uuid.cjs +23 -0
- package/dist/uuid.d.cts +16 -0
- package/dist/uuid.d.ts +17 -0
- package/dist/uuid.js +23 -0
- package/dist/validateEmail.cjs +19 -0
- package/dist/validateEmail.d.cts +16 -0
- package/dist/validateEmail.d.ts +17 -0
- package/dist/validateEmail.js +19 -0
- package/dist/validateIdCard.cjs +62 -0
- package/dist/validateIdCard.d.cts +15 -0
- package/dist/validateIdCard.d.ts +16 -0
- package/dist/validateIdCard.js +62 -0
- package/dist/validatePhone.cjs +19 -0
- package/dist/validatePhone.d.cts +16 -0
- package/dist/validatePhone.d.ts +17 -0
- package/dist/validatePhone.js +19 -0
- package/package.json +351 -58
- package/dist/array/chunk.d.cts.map +0 -1
- package/dist/array/chunk.d.ts.map +0 -1
- package/dist/array/chunk.js.map +0 -1
- package/dist/array/flatten.d.cts.map +0 -1
- package/dist/array/flatten.d.ts.map +0 -1
- package/dist/array/flatten.js.map +0 -1
- package/dist/array/shuffle.d.cts.map +0 -1
- package/dist/array/shuffle.d.ts.map +0 -1
- package/dist/array/shuffle.js.map +0 -1
- package/dist/array/unique.d.cts.map +0 -1
- package/dist/array/unique.d.ts.map +0 -1
- package/dist/array/unique.js.map +0 -1
- package/dist/base/deepClone.d.cts.map +0 -1
- package/dist/base/deepClone.d.ts.map +0 -1
- package/dist/base/deepClone.js.map +0 -1
- package/dist/base/isArray.d.cts.map +0 -1
- package/dist/base/isArray.d.ts.map +0 -1
- package/dist/base/isArray.js.map +0 -1
- package/dist/base/isObject.d.cts.map +0 -1
- package/dist/base/isObject.d.ts.map +0 -1
- package/dist/base/isObject.js.map +0 -1
- package/dist/base/isString.d.cts.map +0 -1
- package/dist/base/isString.d.ts.map +0 -1
- package/dist/base/isString.js.map +0 -1
- package/dist/date/formatDate.d.cts.map +0 -1
- package/dist/date/formatDate.d.ts.map +0 -1
- package/dist/date/formatDate.js.map +0 -1
- package/dist/date/getRelativeTime.d.cts.map +0 -1
- package/dist/date/getRelativeTime.d.ts.map +0 -1
- package/dist/date/getRelativeTime.js.map +0 -1
- package/dist/function/debounce.d.cts.map +0 -1
- package/dist/function/debounce.d.ts.map +0 -1
- package/dist/function/debounce.js.map +0 -1
- package/dist/function/throttle.d.cts.map +0 -1
- package/dist/function/throttle.d.ts.map +0 -1
- package/dist/function/throttle.js.map +0 -1
- package/dist/number/clamp.d.cts.map +0 -1
- package/dist/number/clamp.d.ts.map +0 -1
- package/dist/number/clamp.js.map +0 -1
- package/dist/number/formatThousands.d.cts.map +0 -1
- package/dist/number/formatThousands.d.ts.map +0 -1
- package/dist/number/formatThousands.js.map +0 -1
- package/dist/number/randomInt.d.cts.map +0 -1
- package/dist/number/randomInt.d.ts.map +0 -1
- package/dist/number/randomInt.js.map +0 -1
- package/dist/string/camelCase.d.cts.map +0 -1
- package/dist/string/camelCase.d.ts.map +0 -1
- package/dist/string/camelCase.js.map +0 -1
- package/dist/string/capitalize.d.cts.map +0 -1
- package/dist/string/capitalize.d.ts.map +0 -1
- package/dist/string/capitalize.js.map +0 -1
- package/dist/string/kebabCase.d.cts.map +0 -1
- package/dist/string/kebabCase.d.ts.map +0 -1
- package/dist/string/kebabCase.js.map +0 -1
- /package/dist/{string/kebabCase.cjs → kebabCase.cjs} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/dom/isInViewport/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断元素是否在可视区域内
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param offset - 偏移量(px),正值提前触发,负值延迟触发
|
|
7
|
+
* @returns 是否在视口中
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import isInViewport from '@tanwan/utils/isInViewport'
|
|
12
|
+
* isInViewport(el) // 完全或部分在视口中
|
|
13
|
+
* isInViewport(el, 100) // 提前 100px 就认为在视口中
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function isInViewport(el: Element, offset?: number): boolean;
|
|
17
|
+
export = isInViewport;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/dom/isInViewport/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断元素是否在可视区域内
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param offset - 偏移量(px),正值提前触发,负值延迟触发
|
|
7
|
+
* @returns 是否在视口中
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import isInViewport from '@tanwan/utils/isInViewport'
|
|
12
|
+
* isInViewport(el) // 完全或部分在视口中
|
|
13
|
+
* isInViewport(el, 100) // 提前 100px 就认为在视口中
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function isInViewport(el: Element, offset?: number): boolean;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { isInViewport as default };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/dom/isInViewport/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断元素是否在可视区域内
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param offset - 偏移量(px),正值提前触发,负值延迟触发
|
|
7
|
+
* @returns 是否在视口中
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import isInViewport from '@tanwan/utils/isInViewport'
|
|
12
|
+
* isInViewport(el) // 完全或部分在视口中
|
|
13
|
+
* isInViewport(el, 100) // 提前 100px 就认为在视口中
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
function isInViewport(el, offset = 0) {
|
|
17
|
+
const rect = el.getBoundingClientRect();
|
|
18
|
+
const { innerHeight, innerWidth } = window;
|
|
19
|
+
return rect.top < innerHeight + offset && rect.bottom > -offset && rect.left < innerWidth + offset && rect.right > -offset;
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { isInViewport as default };
|
package/dist/isNil.cjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/base/isNil/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 `null` 或 `undefined`
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNil from '@tanwan/utils/isNil'
|
|
8
|
+
* isNil(null) // true
|
|
9
|
+
* isNil(undefined) // true
|
|
10
|
+
* isNil(0) // false
|
|
11
|
+
* isNil('') // false
|
|
12
|
+
* isNil(false) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function isNil(value) {
|
|
16
|
+
return value === null || value === void 0;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
module.exports = isNil;
|
package/dist/isNil.d.cts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/base/isNil/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 `null` 或 `undefined`
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNil from '@tanwan/utils/isNil'
|
|
8
|
+
* isNil(null) // true
|
|
9
|
+
* isNil(undefined) // true
|
|
10
|
+
* isNil(0) // false
|
|
11
|
+
* isNil('') // false
|
|
12
|
+
* isNil(false) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function isNil(value: unknown): value is null | undefined;
|
|
16
|
+
export = isNil;
|
package/dist/isNil.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/base/isNil/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 `null` 或 `undefined`
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNil from '@tanwan/utils/isNil'
|
|
8
|
+
* isNil(null) // true
|
|
9
|
+
* isNil(undefined) // true
|
|
10
|
+
* isNil(0) // false
|
|
11
|
+
* isNil('') // false
|
|
12
|
+
* isNil(false) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function isNil(value: unknown): value is null | undefined;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { isNil as default };
|
package/dist/isNil.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/base/isNil/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 `null` 或 `undefined`
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNil from '@tanwan/utils/isNil'
|
|
8
|
+
* isNil(null) // true
|
|
9
|
+
* isNil(undefined) // true
|
|
10
|
+
* isNil(0) // false
|
|
11
|
+
* isNil('') // false
|
|
12
|
+
* isNil(false) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function isNil(value) {
|
|
16
|
+
return value === null || value === void 0;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { isNil as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/base/isNumber/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为数值类型(不含 `NaN`)
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNumber from '@tanwan/utils/isNumber'
|
|
8
|
+
* isNumber(0) // true
|
|
9
|
+
* isNumber(3.14) // true
|
|
10
|
+
* isNumber(NaN) // false
|
|
11
|
+
* isNumber('3') // false
|
|
12
|
+
* isNumber(null) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function isNumber(value) {
|
|
16
|
+
return typeof value === "number" && !Number.isNaN(value);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
module.exports = isNumber;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/base/isNumber/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为数值类型(不含 `NaN`)
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNumber from '@tanwan/utils/isNumber'
|
|
8
|
+
* isNumber(0) // true
|
|
9
|
+
* isNumber(3.14) // true
|
|
10
|
+
* isNumber(NaN) // false
|
|
11
|
+
* isNumber('3') // false
|
|
12
|
+
* isNumber(null) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function isNumber(value: unknown): value is number;
|
|
16
|
+
export = isNumber;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/base/isNumber/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为数值类型(不含 `NaN`)
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNumber from '@tanwan/utils/isNumber'
|
|
8
|
+
* isNumber(0) // true
|
|
9
|
+
* isNumber(3.14) // true
|
|
10
|
+
* isNumber(NaN) // false
|
|
11
|
+
* isNumber('3') // false
|
|
12
|
+
* isNumber(null) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function isNumber(value: unknown): value is number;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { isNumber as default };
|
package/dist/isNumber.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/base/isNumber/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为数值类型(不含 `NaN`)
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isNumber from '@tanwan/utils/isNumber'
|
|
8
|
+
* isNumber(0) // true
|
|
9
|
+
* isNumber(3.14) // true
|
|
10
|
+
* isNumber(NaN) // false
|
|
11
|
+
* isNumber('3') // false
|
|
12
|
+
* isNumber(null) // false
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function isNumber(value) {
|
|
16
|
+
return typeof value === "number" && !Number.isNaN(value);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { isNumber as default };
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* 检测变量是否为普通对象(非null、非数组)
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isObject from '@
|
|
6
|
+
* import isObject from '@tanwan/utils/isObject'
|
|
7
7
|
* isObject({ a: 1 }) // true
|
|
8
8
|
* isObject(null) // false
|
|
9
9
|
* isObject([1, 2]) // false
|
|
10
10
|
* ```
|
|
11
11
|
*/
|
|
12
12
|
declare function isObject(v: unknown): v is Record<string, unknown>;
|
|
13
|
-
export = isObject;
|
|
14
|
-
//# sourceMappingURL=isObject.d.cts.map
|
|
13
|
+
export = isObject;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 检测变量是否为普通对象(非null、非数组)
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isObject from '@
|
|
6
|
+
* import isObject from '@tanwan/utils/isObject'
|
|
7
7
|
* isObject({ a: 1 }) // true
|
|
8
8
|
* isObject(null) // false
|
|
9
9
|
* isObject([1, 2]) // false
|
|
@@ -11,5 +11,4 @@
|
|
|
11
11
|
*/
|
|
12
12
|
declare function isObject(v: unknown): v is Record<string, unknown>;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { isObject as default };
|
|
15
|
-
//# sourceMappingURL=isObject.d.ts.map
|
|
14
|
+
export { isObject as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 检测变量是否为普通对象(非null、非数组)
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isObject from '@
|
|
6
|
+
* import isObject from '@tanwan/utils/isObject'
|
|
7
7
|
* isObject({ a: 1 }) // true
|
|
8
8
|
* isObject(null) // false
|
|
9
9
|
* isObject([1, 2]) // false
|
|
@@ -14,5 +14,3 @@ function isObject(v) {
|
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
16
|
export { isObject as default };
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=isObject.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/base/isPrimitive/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为原始类型
|
|
4
|
+
*
|
|
5
|
+
* 原始类型包括:`string` / `number` / `boolean` / `null` / `undefined` / `symbol` / `bigint`
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import isPrimitive from '@tanwan/utils/isPrimitive'
|
|
10
|
+
* isPrimitive('hello') // true
|
|
11
|
+
* isPrimitive(42) // true
|
|
12
|
+
* isPrimitive(null) // true
|
|
13
|
+
* isPrimitive({}) // false
|
|
14
|
+
* isPrimitive([]) // false
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function isPrimitive(value) {
|
|
18
|
+
return value === null || typeof value !== "object" && typeof value !== "function";
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
module.exports = isPrimitive;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/base/isPrimitive/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为原始类型
|
|
4
|
+
*
|
|
5
|
+
* 原始类型包括:`string` / `number` / `boolean` / `null` / `undefined` / `symbol` / `bigint`
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import isPrimitive from '@tanwan/utils/isPrimitive'
|
|
10
|
+
* isPrimitive('hello') // true
|
|
11
|
+
* isPrimitive(42) // true
|
|
12
|
+
* isPrimitive(null) // true
|
|
13
|
+
* isPrimitive({}) // false
|
|
14
|
+
* isPrimitive([]) // false
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function isPrimitive(value: unknown): boolean;
|
|
18
|
+
export = isPrimitive;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/base/isPrimitive/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为原始类型
|
|
4
|
+
*
|
|
5
|
+
* 原始类型包括:`string` / `number` / `boolean` / `null` / `undefined` / `symbol` / `bigint`
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import isPrimitive from '@tanwan/utils/isPrimitive'
|
|
10
|
+
* isPrimitive('hello') // true
|
|
11
|
+
* isPrimitive(42) // true
|
|
12
|
+
* isPrimitive(null) // true
|
|
13
|
+
* isPrimitive({}) // false
|
|
14
|
+
* isPrimitive([]) // false
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function isPrimitive(value: unknown): boolean;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { isPrimitive as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/base/isPrimitive/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为原始类型
|
|
4
|
+
*
|
|
5
|
+
* 原始类型包括:`string` / `number` / `boolean` / `null` / `undefined` / `symbol` / `bigint`
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import isPrimitive from '@tanwan/utils/isPrimitive'
|
|
10
|
+
* isPrimitive('hello') // true
|
|
11
|
+
* isPrimitive(42) // true
|
|
12
|
+
* isPrimitive(null) // true
|
|
13
|
+
* isPrimitive({}) // false
|
|
14
|
+
* isPrimitive([]) // false
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function isPrimitive(value) {
|
|
18
|
+
return value === null || typeof value !== "object" && typeof value !== "function";
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { isPrimitive as default };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/base/isPromise/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 Promise 实例
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isPromise from '@tanwan/utils/isPromise'
|
|
8
|
+
* isPromise(Promise.resolve()) // true
|
|
9
|
+
* isPromise(new Promise(() => {})) // true
|
|
10
|
+
* isPromise({ then: () => {} }) // false
|
|
11
|
+
* isPromise(null) // false
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function isPromise(value) {
|
|
15
|
+
return value instanceof Promise;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
module.exports = isPromise;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/base/isPromise/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 Promise 实例
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isPromise from '@tanwan/utils/isPromise'
|
|
8
|
+
* isPromise(Promise.resolve()) // true
|
|
9
|
+
* isPromise(new Promise(() => {})) // true
|
|
10
|
+
* isPromise({ then: () => {} }) // false
|
|
11
|
+
* isPromise(null) // false
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
declare function isPromise<T = unknown>(value: unknown): value is Promise<T>;
|
|
15
|
+
export = isPromise;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/base/isPromise/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 Promise 实例
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isPromise from '@tanwan/utils/isPromise'
|
|
8
|
+
* isPromise(Promise.resolve()) // true
|
|
9
|
+
* isPromise(new Promise(() => {})) // true
|
|
10
|
+
* isPromise({ then: () => {} }) // false
|
|
11
|
+
* isPromise(null) // false
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
declare function isPromise<T = unknown>(value: unknown): value is Promise<T>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { isPromise as default };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/base/isPromise/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 判断值是否为 Promise 实例
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import isPromise from '@tanwan/utils/isPromise'
|
|
8
|
+
* isPromise(Promise.resolve()) // true
|
|
9
|
+
* isPromise(new Promise(() => {})) // true
|
|
10
|
+
* isPromise({ then: () => {} }) // false
|
|
11
|
+
* isPromise(null) // false
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function isPromise(value) {
|
|
15
|
+
return value instanceof Promise;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { isPromise as default };
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
* 检测变量是否为字符串
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isString from '@
|
|
6
|
+
* import isString from '@tanwan/utils/isString'
|
|
7
7
|
* isString('hello') // true
|
|
8
8
|
* isString(123) // false
|
|
9
9
|
* ```
|
|
10
10
|
*/
|
|
11
11
|
declare function isString(v: unknown): v is string;
|
|
12
|
-
export = isString;
|
|
13
|
-
//# sourceMappingURL=isString.d.cts.map
|
|
12
|
+
export = isString;
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* 检测变量是否为字符串
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isString from '@
|
|
6
|
+
* import isString from '@tanwan/utils/isString'
|
|
7
7
|
* isString('hello') // true
|
|
8
8
|
* isString(123) // false
|
|
9
9
|
* ```
|
|
10
10
|
*/
|
|
11
11
|
declare function isString(v: unknown): v is string;
|
|
12
12
|
//#endregion
|
|
13
|
-
export { isString as default };
|
|
14
|
-
//# sourceMappingURL=isString.d.ts.map
|
|
13
|
+
export { isString as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 检测变量是否为字符串
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import isString from '@
|
|
6
|
+
* import isString from '@tanwan/utils/isString'
|
|
7
7
|
* isString('hello') // true
|
|
8
8
|
* isString(123) // false
|
|
9
9
|
* ```
|
|
@@ -13,5 +13,3 @@ function isString(v) {
|
|
|
13
13
|
}
|
|
14
14
|
//#endregion
|
|
15
15
|
export { isString as default };
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=isString.js.map
|
package/dist/joinUrl.cjs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/url/joinUrl/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 安全拼接 URL 片段,自动处理斜杠
|
|
4
|
+
*
|
|
5
|
+
* @param parts - URL 片段列表
|
|
6
|
+
* @returns 拼接后的完整 URL
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import joinUrl from '@tanwan/utils/joinUrl'
|
|
11
|
+
* joinUrl('https://api.example.com', 'users', '123')
|
|
12
|
+
* // 'https://api.example.com/users/123'
|
|
13
|
+
*
|
|
14
|
+
* joinUrl('https://api.example.com/', '/users/', '/123/')
|
|
15
|
+
* // 'https://api.example.com/users/123'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function joinUrl(...parts) {
|
|
19
|
+
return parts.map((part, i) => {
|
|
20
|
+
if (i === 0) return part.replace(/\/+$/, "");
|
|
21
|
+
return part.replace(/^\/+|\/+$/g, "");
|
|
22
|
+
}).filter(Boolean).join("/");
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
module.exports = joinUrl;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/url/joinUrl/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 安全拼接 URL 片段,自动处理斜杠
|
|
4
|
+
*
|
|
5
|
+
* @param parts - URL 片段列表
|
|
6
|
+
* @returns 拼接后的完整 URL
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import joinUrl from '@tanwan/utils/joinUrl'
|
|
11
|
+
* joinUrl('https://api.example.com', 'users', '123')
|
|
12
|
+
* // 'https://api.example.com/users/123'
|
|
13
|
+
*
|
|
14
|
+
* joinUrl('https://api.example.com/', '/users/', '/123/')
|
|
15
|
+
* // 'https://api.example.com/users/123'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function joinUrl(...parts: string[]): string;
|
|
19
|
+
export = joinUrl;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/url/joinUrl/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 安全拼接 URL 片段,自动处理斜杠
|
|
4
|
+
*
|
|
5
|
+
* @param parts - URL 片段列表
|
|
6
|
+
* @returns 拼接后的完整 URL
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import joinUrl from '@tanwan/utils/joinUrl'
|
|
11
|
+
* joinUrl('https://api.example.com', 'users', '123')
|
|
12
|
+
* // 'https://api.example.com/users/123'
|
|
13
|
+
*
|
|
14
|
+
* joinUrl('https://api.example.com/', '/users/', '/123/')
|
|
15
|
+
* // 'https://api.example.com/users/123'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function joinUrl(...parts: string[]): string;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { joinUrl as default };
|
package/dist/joinUrl.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/url/joinUrl/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 安全拼接 URL 片段,自动处理斜杠
|
|
4
|
+
*
|
|
5
|
+
* @param parts - URL 片段列表
|
|
6
|
+
* @returns 拼接后的完整 URL
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import joinUrl from '@tanwan/utils/joinUrl'
|
|
11
|
+
* joinUrl('https://api.example.com', 'users', '123')
|
|
12
|
+
* // 'https://api.example.com/users/123'
|
|
13
|
+
*
|
|
14
|
+
* joinUrl('https://api.example.com/', '/users/', '/123/')
|
|
15
|
+
* // 'https://api.example.com/users/123'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function joinUrl(...parts) {
|
|
19
|
+
return parts.map((part, i) => {
|
|
20
|
+
if (i === 0) return part.replace(/\/+$/, "");
|
|
21
|
+
return part.replace(/^\/+|\/+$/g, "");
|
|
22
|
+
}).filter(Boolean).join("/");
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { joinUrl as default };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/dom/lazyLoadImages/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 为图片添加懒加载(IntersectionObserver)
|
|
4
|
+
*
|
|
5
|
+
* 图片需要有 `data-src` 属性存放真实 URL。加载时会替换到 `src`,并从 `data-src` 移除。
|
|
6
|
+
*
|
|
7
|
+
* @param selector - 图片选择器,默认 `'img[data-src]'`
|
|
8
|
+
* @returns 清理函数(调用后取消懒加载)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import lazyLoadImages from '@tanwan/utils/lazyLoadImages'
|
|
13
|
+
* lazyLoadImages()
|
|
14
|
+
* // 或指定选择器
|
|
15
|
+
* lazyLoadImages('.lazy-img')
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function lazyLoadImages(selector = "img[data-src]") {
|
|
19
|
+
const observer = new IntersectionObserver((entries) => {
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
if (!entry.isIntersecting) continue;
|
|
22
|
+
const img = entry.target;
|
|
23
|
+
const src = img.dataset.src;
|
|
24
|
+
if (src) {
|
|
25
|
+
img.src = src;
|
|
26
|
+
delete img.dataset.src;
|
|
27
|
+
}
|
|
28
|
+
observer.unobserve(img);
|
|
29
|
+
}
|
|
30
|
+
}, { rootMargin: "100px" });
|
|
31
|
+
const images = document.querySelectorAll(selector);
|
|
32
|
+
for (const img of images) observer.observe(img);
|
|
33
|
+
return () => observer.disconnect();
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
module.exports = lazyLoadImages;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/dom/lazyLoadImages/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 为图片添加懒加载(IntersectionObserver)
|
|
4
|
+
*
|
|
5
|
+
* 图片需要有 `data-src` 属性存放真实 URL。加载时会替换到 `src`,并从 `data-src` 移除。
|
|
6
|
+
*
|
|
7
|
+
* @param selector - 图片选择器,默认 `'img[data-src]'`
|
|
8
|
+
* @returns 清理函数(调用后取消懒加载)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import lazyLoadImages from '@tanwan/utils/lazyLoadImages'
|
|
13
|
+
* lazyLoadImages()
|
|
14
|
+
* // 或指定选择器
|
|
15
|
+
* lazyLoadImages('.lazy-img')
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function lazyLoadImages(selector?: string): () => void;
|
|
19
|
+
export = lazyLoadImages;
|