From 3643ad61c5a9e60a6b7ff90dc54026e4ad9bd451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BA=9A=E6=98=95?= <1549469775@qq.com> Date: Tue, 8 Jul 2025 18:11:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B5=8F=E8=A7=88=E5=99=A8?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=BA=93=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/.vitepress/plugins/markdownTransform.ts | 7 ++- packages/browser/src/check/__tests__/index.ts | 72 ++++++++++++++++++++++ packages/browser/src/check/docs/demo.vue | 45 -------------- packages/browser/src/check/docs/index.md | 2 +- packages/browser/src/check/docs/index.vue | 47 ++++++++++++-- packages/browser/src/event/docs/demo.vue | 31 ---------- packages/browser/src/event/docs/index.vue | 35 ++++++++--- packages/browser/src/index.ts | 1 + packages/browser/src/scrollTo/docs/demo.vue | 15 ----- packages/browser/src/scrollTo/docs/index.vue | 19 +++--- .../browser/src/sessionStorage/__tests__/index.ts | 30 +++++++++ packages/browser/src/sessionStorage/docs/index.md | 7 +++ packages/browser/src/sessionStorage/docs/index.vue | 10 +++ packages/browser/src/sessionStorage/index.ts | 55 +++++++++++++++++ packages/core/src/array/demote/docs/index.md | 7 +++ packages/core/src/array/demote/docs/index.vue | 29 +++++++++ packages/core/src/throttle/index.ts | 7 +++ packages/core/src/utils/index.ts | 6 +- 18 files changed, 311 insertions(+), 114 deletions(-) create mode 100644 packages/browser/src/check/__tests__/index.ts delete mode 100644 packages/browser/src/check/docs/demo.vue delete mode 100644 packages/browser/src/event/docs/demo.vue delete mode 100644 packages/browser/src/scrollTo/docs/demo.vue create mode 100644 packages/browser/src/sessionStorage/__tests__/index.ts create mode 100644 packages/browser/src/sessionStorage/docs/index.md create mode 100644 packages/browser/src/sessionStorage/docs/index.vue create mode 100644 packages/browser/src/sessionStorage/index.ts create mode 100644 packages/core/src/array/demote/docs/index.md create mode 100644 packages/core/src/array/demote/docs/index.vue diff --git a/packages/.vitepress/plugins/markdownTransform.ts b/packages/.vitepress/plugins/markdownTransform.ts index 132249d..99fa53b 100644 --- a/packages/.vitepress/plugins/markdownTransform.ts +++ b/packages/.vitepress/plugins/markdownTransform.ts @@ -29,7 +29,12 @@ export function MarkdownTransform(): any { let rawcodeArray = (Array.from(code.matchAll(/<\!--code\:(.*?)\:code-->/g) ?? []) as any).map(([_, name]) => name) - + // console.log(this._container.config.root); + // console.log(id); + // console.log(oneDir); + // console.log(allFiles); + // console.log(matter); + for (let i = 0; i < allFiles.length; i++) { const file = allFiles[i]; const p = path.resolve(oneDir, file) diff --git a/packages/browser/src/check/__tests__/index.ts b/packages/browser/src/check/__tests__/index.ts new file mode 100644 index 0000000..0006064 --- /dev/null +++ b/packages/browser/src/check/__tests__/index.ts @@ -0,0 +1,72 @@ +import { IEVersion } from "@xyx-utils/browser"; + +describe("测试 on 与 off", () => { + it("IE7 版本", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' + }; + expect(IEVersion()).toBe(7); + }); + it("IE6 版本", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + }; + expect(IEVersion()).toBe(6); + }); + it("IE8 版本", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1)' + }; + expect(IEVersion()).toBe(8); + }); + it("IE9 版本", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.1)' + }; + expect(IEVersion()).toBe(9); + }); + it("IE10 版本", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 5.1)' + }; + expect(IEVersion()).toBe(10); + }); + it("edge", () => { + global.navigator = { + ...global.navigator, // 保留其他可能存在的属性 + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36Edge/13.10586' + }; + expect(IEVersion()).toBe("edge"); + }); + // it("触发多次click事件", () => { + // const mockListener = vi.fn(); + // const element = document.createElement("div"); + // on(element, "click", mockListener); + + // const event = new MouseEvent("click"); + // element.dispatchEvent(event); + // element.dispatchEvent(event); + + // expect(mockListener).toBeCalledTimes(2); + // }); + // it("仅触发一次click事件", () => { + // const mockListener = vi.fn(); + // const element = document.createElement("div"); + // on(element, "click", mockListener); + + // const event = new MouseEvent("click"); + // element.dispatchEvent(event); + + // off(element, "click", mockListener); + + // element.dispatchEvent(event); + // element.dispatchEvent(event); + + // expect(mockListener).toBeCalledTimes(1); + // }); +}); diff --git a/packages/browser/src/check/docs/demo.vue b/packages/browser/src/check/docs/demo.vue deleted file mode 100644 index 3117c63..0000000 --- a/packages/browser/src/check/docs/demo.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/packages/browser/src/check/docs/index.md b/packages/browser/src/check/docs/index.md index e3b1613..76cac30 100644 --- a/packages/browser/src/check/docs/index.md +++ b/packages/browser/src/check/docs/index.md @@ -7,4 +7,4 @@ title: 平台检测 ## Demo - \ No newline at end of file + \ No newline at end of file diff --git a/packages/browser/src/check/docs/index.vue b/packages/browser/src/check/docs/index.vue index 3247bc0..3117c63 100644 --- a/packages/browser/src/check/docs/index.vue +++ b/packages/browser/src/check/docs/index.vue @@ -1,10 +1,45 @@ - \ No newline at end of file + +const ExplorerInfo = getExplorerInfo() +const IeInfo = IEVersion() +const html5PlusInfo = isHtml5Plus() +const mobileInfo = isMobile() +const weChatInfo = isWeChat() +const wxMpInfo = ref(); +; (async () => { + try { + await isWxMp() + wxMpInfo.value = true + } catch (error) { + wxMpInfo.value = false + } +})(); + + + diff --git a/packages/browser/src/event/docs/demo.vue b/packages/browser/src/event/docs/demo.vue deleted file mode 100644 index e29fd1f..0000000 --- a/packages/browser/src/event/docs/demo.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/packages/browser/src/event/docs/index.vue b/packages/browser/src/event/docs/index.vue index 3247bc0..e29fd1f 100644 --- a/packages/browser/src/event/docs/index.vue +++ b/packages/browser/src/event/docs/index.vue @@ -1,10 +1,31 @@ - \ No newline at end of file +const targetRef = ref(); +const isBind = ref(false) + +function clickNode() { + alert("click"); +} + +function onBindEvent() { + on(targetRef.value, "click", clickNode); + isBind.value = true +} + +function onRemoveEvent() { + off(targetRef.value, "click", clickNode); + isBind.value = false +} + + diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts index 359d3d7..d5a3ca3 100644 --- a/packages/browser/src/index.ts +++ b/packages/browser/src/index.ts @@ -1,3 +1,4 @@ export * from "./event"; export * from "./check"; export * from "./scrollTo"; +// export * from "./sessionStorage"; diff --git a/packages/browser/src/scrollTo/docs/demo.vue b/packages/browser/src/scrollTo/docs/demo.vue deleted file mode 100644 index 290dfe1..0000000 --- a/packages/browser/src/scrollTo/docs/demo.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/packages/browser/src/scrollTo/docs/index.vue b/packages/browser/src/scrollTo/docs/index.vue index 3247bc0..290dfe1 100644 --- a/packages/browser/src/scrollTo/docs/index.vue +++ b/packages/browser/src/scrollTo/docs/index.vue @@ -1,10 +1,15 @@ - \ No newline at end of file +function onBindEvent(height) { + scrollTo(height, 1000) +} + + + diff --git a/packages/browser/src/sessionStorage/__tests__/index.ts b/packages/browser/src/sessionStorage/__tests__/index.ts new file mode 100644 index 0000000..72c782c --- /dev/null +++ b/packages/browser/src/sessionStorage/__tests__/index.ts @@ -0,0 +1,30 @@ +import { on, off } from "@xyx-utils/browser"; + +describe("测试 on 与 off", () => { + it("触发多次click事件", () => { + const mockListener = vi.fn(); + const element = document.createElement("div"); + on(element, "click", mockListener); + + const event = new MouseEvent("click"); + element.dispatchEvent(event); + element.dispatchEvent(event); + + expect(mockListener).toBeCalledTimes(2); + }); + it("仅触发一次click事件", () => { + const mockListener = vi.fn(); + const element = document.createElement("div"); + on(element, "click", mockListener); + + const event = new MouseEvent("click"); + element.dispatchEvent(event); + + off(element, "click", mockListener); + + element.dispatchEvent(event); + element.dispatchEvent(event); + + expect(mockListener).toBeCalledTimes(1); + }); +}); diff --git a/packages/browser/src/sessionStorage/docs/index.md b/packages/browser/src/sessionStorage/docs/index.md new file mode 100644 index 0000000..e34c816 --- /dev/null +++ b/packages/browser/src/sessionStorage/docs/index.md @@ -0,0 +1,7 @@ +--- +title: session存储 +--- + +## Demo + + diff --git a/packages/browser/src/sessionStorage/docs/index.vue b/packages/browser/src/sessionStorage/docs/index.vue new file mode 100644 index 0000000..32cc0f2 --- /dev/null +++ b/packages/browser/src/sessionStorage/docs/index.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/packages/browser/src/sessionStorage/index.ts b/packages/browser/src/sessionStorage/index.ts new file mode 100644 index 0000000..706cf00 --- /dev/null +++ b/packages/browser/src/sessionStorage/index.ts @@ -0,0 +1,55 @@ +const _is_session_storage = !!window.sessionStorage; +let _data_session_dom, _dataSessionDom_name = window.location.hostname || 'sessionUserData'; +if (!_is_session_storage) { + try { + _data_session_dom = document.createElement('input'); + _data_session_dom.type = 'hidden'; + _data_session_dom.style.display = "none"; + _data_session_dom.addBehavior('#default#userData'); //userData的语法 + document.body.appendChild(_data_session_dom); + _data_session_dom.expires = new Date($.date().addDays(365)).toUTCString(); //设定过期时间 + //加载userdata + _data_session_dom.load(_dataSessionDom_name); + } catch (e) { + _data_session_dom = null; + console.log("userData初始化失败!"); + } +} +export const session_storage = (key, value) => { + let _return_value; + try { + if (_is_session_storage) { + if (value != undefined) { + sessionStorage.setItem(encodeURIComponent(key), encodeURIComponent(value)); + } else { + _return_value = sessionStorage.getItem(encodeURIComponent(key)); + return _return_value ? decodeURIComponent(_return_value) : null; + } + } else if (_data_session_dom) { + if (value != undefined) { + _data_session_dom.setAttribute(key, value); + _data_session_dom.save(_dataSessionDom_name); + } else { + _return_value = _data_session_dom.getAttribute(key); + return _return_value ? decodeURIComponent(_return_value) : null; + } + } + } catch (e) { + return false; + } +}; +export const remove_session_storage_item = (key) => { + if (_is_session_storage) { + sessionStorage.removeItem(encodeURIComponent(key)); + } else if (_data_session_dom) { + _data_session_dom.removeAttribute(encodeURIComponent(key)); + _data_session_dom.save(_dataSessionDom_name); + } +}; +export const clear_session_storage = () => { + if (_is_session_storage) { + sessionStorage.clear(); + } else { + _data_session_dom.remove(); + } +}; \ No newline at end of file diff --git a/packages/core/src/array/demote/docs/index.md b/packages/core/src/array/demote/docs/index.md new file mode 100644 index 0000000..fc140fe --- /dev/null +++ b/packages/core/src/array/demote/docs/index.md @@ -0,0 +1,7 @@ +--- +title: demote +category: 数组 +source-path: /docs/array/demote.html +--- + + \ No newline at end of file diff --git a/packages/core/src/array/demote/docs/index.vue b/packages/core/src/array/demote/docs/index.vue new file mode 100644 index 0000000..bb5ce30 --- /dev/null +++ b/packages/core/src/array/demote/docs/index.vue @@ -0,0 +1,29 @@ + + + \ No newline at end of file diff --git a/packages/core/src/throttle/index.ts b/packages/core/src/throttle/index.ts index 4277708..1426d7d 100644 --- a/packages/core/src/throttle/index.ts +++ b/packages/core/src/throttle/index.ts @@ -1,3 +1,10 @@ +/** + * 函数防抖 + * @param fn 防抖构造函数 + * @param wait 防抖时间 + * @param options 防抖参数 + * @returns 处理过的函数 + */ export function throttle( fn: (...args: T) => R, wait: number = 200, diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index 4f2994d..216a223 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,4 +1,8 @@ - +/** + * 判断是否是数组 + * @param arr 数组 + * @returns 是否是数组 + */ export function isArray(arr) { return Array.isArray(arr) } \ No newline at end of file