UNPKG

js-xxx

Version:

前端 JavaScript 常用函数/工具/方法库

553 lines 22 kB
/** * 开启全屏 * @example * openFullscreen(); /// 开启全屏 * @param element 元素 * @returns * @category Dom-工具方法 */ export declare function openFullscreen(element?: any): void; /** * 关闭全屏 * @example * closeFullscreen(); /// 关闭全屏 * @returns * @category Dom-工具方法 */ export declare function closeFullscreen(): void; /** * 字符串转实体字符 * @example * str2html('<>&"'); /// '&lt;&gt;&amp;&quot;' * @param str 字符串 * @returns * @category Custom-转码 */ export declare function str2html(str: string): string; /** * 实体字符转字符串 * @example * html2str('&lt;&gt;&amp;&quot;'); /// '<>&"' * @param value 实体字符串 * @returns * @category Custom-转码 */ export declare function html2str(value: string): string | null; /** * 插入某元素到指定 Element 之后 * @example * insertAfter(document.getElementById('a'), document.getElementById('b')); * @param newElement 某元素 * @param targetElement 指定元素 * @returns * @category Dom-工具方法 */ export declare function insertAfter(newElement: any, targetElement: any): void; /** * Y 轴滚动到指定位置 * @example * scrollYTo(0); /// 滚动到顶部 * scrollYTo('start', null, document.documentElement); /// 滚动到顶部 * scrollYTo('end', (percent) => console.log(percent), document.querySelector('body')); /// 滚动到底部 * @param targetVal 'start' | 'end' | number * @param callback 回调 * @param dom 元素对象 * @returns * @category Scroll-滚动相关 */ export declare function scrollYTo(targetVal: 'start' | 'end' | number, callback: any, dom?: any): void; /** * X 轴滚动到指定位置 * @example * scrollXTo(0); /// 滚动到左侧 * scrollXTo('start', null, document.documentElement); /// 滚动到左侧 * scrollXTo('end', (percent) => console.log(percent), document.querySelector('body')); /// 滚动到右侧 * @param targetVal 'start' | 'end' | number * @param callback 回调 * @param dom 元素对象 * @returns * @category Scroll-滚动相关 */ export declare function scrollXTo(targetVal: 'start' | 'end' | number, callback: any, dom?: any): void; /** * 将元素滚动到视野范围 * @example * scrollIntoView(document.querySelector('.test')); /// test 元素滚动到视野范围 * scrollIntoView(document.querySelector('.test'), 'start'); /// test 元素滚动到视野范围顶部 * @param dom 元素对象 * @param targetVal 'start' | 'end' | 'center' | 'nearest' * @returns * @category Scroll-滚动相关 */ export declare function scrollToView(dom?: any, targetVal?: 'start' | 'end' | 'center' | 'nearest'): void; /** * 获取滚动条百分比 * @example * getScrollPercent(document.documentElement, 'Y'); /// 0.581134549876 * @param direction X/Y 轴的进度条 * @param dom 元素 * @returns * @category Scroll-滚动相关 */ export declare function getScrollPercent(direction?: 'X' | 'Y', dom?: any): number; /** * 获取最近的可滚动父元素。 * 支持普通 DOM 、 Shadow DOM 和 iframe 。 * @example * getScrollParent(document.querySelector('.form-error')); // Form * getScrollParent(); /// document.documentElement * @param element 目标元素 * @returns * @category Scroll-滚动相关 */ export declare function getScrollParent(element?: HTMLElement | any): HTMLElement | Document | any; /** * 滚动到指定元素,并将其显示在可滚动容器的中间。 * 适用于表单报错时定位报错元素,支持嵌套滚动容器。 * @param options 配置对象,包含以下属性: * - {string} selector - 目标元素的 CSS 选择器。 * - {number} [delay=0] - 滚动执行的延迟时间(毫秒)。 * - {boolean} [parent=false] - 是否在主应用中查找元素(适用于 Shadow DOM 情况)。 * @example * // 立即滚动到指定元素 * scrollToElement({ * selector: '#error-element', * delay: 0, * parent: true, * }); * // 延迟滚动到指定元素 * scrollToElement({ * selector: '.form-error', * delay: 100, * }); * @returns * @category Scroll-滚动相关 */ export declare function scrollToElement(options: { selector: string; delay?: number; parent?: boolean; }): void; /** * 找元素的第 n 级父元素 * @example * findParents(document.getElementById('test'), 3); /// #test 的第三个父元素 * @param element 指定元素 * @param n 第几个 * @returns * @category Dom-工具方法 */ export declare function findParents(element: any, n: number): any; /** * 找元素的所有子元素,解决浏览器兼容问题。 * @example * findChildren(document.getElementById('test')); /// #test 的所有子元素数组 * @param element 指定元素 * @returns * @category Dom-工具方法 */ export declare function findChildren(element: any): any[]; /** * 获取窗口尺寸 * @example * getViewportSize(); /// { width: 1280, height: 649 } * @returns * @category Dom-工具方法 */ export declare function getViewportSize(): { w: number; h: number; }; /** * 获取任一元素的 style 任意属性 * @example * getStyle(document.getElementById('test'), 'width'); /// #test 的 width 属性 * @param element 指定元素 * @param name 属性名称 * @returns * @category Dom-工具方法 */ export declare function getStyleByName(element: any, name: any): any; /** * 添加 link 标签 * @example * appendLink('favicon', 'favicon'); /// 添加一个 link 标签 * @param linkUrl 链接地址 * @param rel 类型 * @returns * @category Dom-工具方法 */ export declare function appendLink(linkUrl: string, rel?: string): HTMLLinkElement; /** * 添加 script 标签 * @example * appendScript('./test.js'); /// 添加一个 script 标签 * @param scriptUrl 脚本地址 * @param async 是否异步 * @param defer 是否延迟加载 * @returns * @category Dom-工具方法 */ export declare function appendScript(scriptUrl: string, async?: boolean, defer?: boolean): HTMLScriptElement; /** * 给元素设置 marquee 内容滚动效果,支持来回滚动,正常跑马灯,无限无缝滚动。 * 一般来说设置两层,滚动的区间就是父元素的大小。 * 若 #demo 高度小于 container,除非 loopType 设置 infinite,否则不会有动画。 * <div class="demo-container"><div id="#demo">...span.items...</div></div> * @example * marquee('#demo'); /// 默认横向正常滚动(loopType=normal) * marquee('.demo-y', {direction: 'Y', loopType: 'infinite', speed: 3}); /// Y 轴无限无缝滚动,speed > 0 越小速度越快。 * marquee('.demo-x', {direction: 'X', loopType: 'origin', speed: 3, style: 'animation-delay:2s;', parentStyle: 'color:red;'}); /// X 轴无限来回滚动 * @param selector 选择器字符串 * @param options 动画配置 * @returns * @category BXH-自定义动画 */ export declare function marquee(selector: string, options?: { direction?: 'X' | 'Y'; loopType?: 'infinite' | 'normal' | 'origin'; speed?: number; style?: string; parentStyle?: string; }): void; /** * 自动堆叠 * @example * stackSticky('.stack', 'top'); /// 所有 .stack 元素自动在 top 上堆叠 * stackSticky('.stack', 'left'); /// 所有 .stack 元素自动在 left 上堆叠 * @param selectors 选择器字符串 * @param direction 堆叠方向 * @returns * @category Dom-工具方法 */ export declare function stackSticky(selectors: string, direction?: string): void; /** * 自动计算 font-size 并设置 * @example * calcFontSize(); /// 按 16/9 计算并设置 * calcFontSize(16/10, true); /// 按 16/10 计算并设置内容居中 * calcFontSize(16/10, true, 'body'); /// 按 16/10 计算并设置 body 偏移使得内容居中 * @param clientRatio 屏幕比例 * @param contentCenter 内容是否居中 * @param offsetSelector 偏移元素选择器,默认设置 html 根节点偏移。 * @returns * @category Dom-工具方法 */ export declare function calcFontSize(clientRatio: number | undefined, contentCenter: boolean | undefined, offsetSelector: any): () => void; /** * px 转 rem * @example * px2rem(30); /// 转化后的 rem * @param px 像素值 * @returns * @category Dom-工具方法 */ export declare function px2rem(px: number): number; /** * 填对应值到对应的 dom 中 * @example * dataTo('.className', 'xxx'); /// xxx 会填入到类名为 class-name 的元素中 * dataTo('.class-name', 'xxx'); /// xxx 会填入到类名为 class-name 的元素中 * dataTo('.class_name', 'xxx'); /// xxx 会填入到类名为 class-name 的元素中 * dataTo('.class.name', 'xxx'); /// xxx 会填入到类名为 class-name 的元素中 * dataTo('#id.name', 'xxx'); /// xxx 会填入到 id 名为 id-name 的元素中 * @param key key 值 * @param value value 值 * @returns * @category Dom-工具方法 */ export declare function dataTo(key: string, value: any): void; /** * 给元素添加/删除类 * @example * toggleClass(myElement, 'active'); /// 给元素添加/删除 active 类 * toggleClass(myElement, ['active', 'disabled']); /// 给元素添加/删除 active/disabled 类 * @param element 元素 * @param className 类 * @returns * @category Dom-工具方法 */ export declare function toggleClass(element: any, className: string | Array<string>): void; /** * 展示水滴加载动画 * @example * const hideProcess = showProcess(myElement); /// 在元素中显示水滴加载动画 * hideProcess(); /// 隐藏水滴加载动画 * @param element 元素 * @returns * @category BXH-自定义动画 */ export declare function showProcess(element: any): () => void; /** * 单击事件转换为多击事件 * Author: WuXingHeng * @example * dom.onclick = onClick2MoreClick(300, clickOneCallBack, clickTwoCallBack, clickThreeCallBack, clickFourCallBack); /// void * @param delay 点击间隔 * @param events 事件多击 rest 参数 * @returns * @category Tools-点击事件相关 */ export declare function onClick2MoreClick(delay?: number, ...events: Array<any>): any; /** * 单独绑定多击事件 * @example * dom.onclick = bindMoreClick(moreClickCallBack, 4, 500); /// 绑定 4 击事件 * @param fn 触发方法 * @param times 几次点击触发 * @param delay 点击间隔 * @returns * @category Tools-点击事件相关 */ export declare function bindMoreClick(fn: any, times?: number, delay?: number): (...args: any[]) => void; /** * 设置长按事件-支持加入单击事件 * @example * addLongPressEvent(document.querySelector('.img-btn'), (event); /// console.log('addLongPressEvent'), 3000); /// 长按会触发事件 * @param element 需要绑定事件的元素 * @param longPressCallback 长按事件函数 * @param duration 长按时间 * @param clickCallback 单击事件函数(可选) * @returns * @category Tools-点击事件相关 */ export declare function addLongPressEvent(element: any, longPressCallback: any, duration?: number, clickCallback?: any): void; /** * 设置网页 icon * @example * setIcon('/favicon.ico') * @param iconLink icon 链接 * @returns * @category Dom-工具方法 */ export declare function setIcon(iconLink: string): void; /** * 复制到剪贴板 * @example * copyToClipboard('hello world') * @param text 内容文本 * @returns * @category Dom-工具方法 */ export declare function copyToClipboard(text: string): void; /** * 获取鼠标选中内容 * @example * getSelectText() * @returns * @category Dom-工具方法 */ export declare function getSelectText(): string | undefined; /** * 触发某个键盘按键事件 * @example * emitKeyboardEvent(108, 'keyup'); // 小键盘回车事件 * emitKeyboardEvent('Enter'); // 回车事件 * emitKeyboardEvent(KEYBOARD_CODE.TAB, 'keypress'); // TAB 事件 * @param keyOrKeyCode 触发键盘 code,默认为 13 。 * @param eventType 事件类型,默认为 'keydown' 。 * @param element 目标元素,默认为 document.body ,支持传 document 。 * @returns * @category Tools-事件相关 */ export declare function emitKeyboardEvent(keyOrKeyCode?: string | number, eventType?: 'keydown' | 'keypress' | 'keyup', element?: HTMLElement | null): void; /** * 触发元素事件 * @example * emitEvent('click', null, document.getElementById('myButton')); // 触发元素点击事件 * emitEvent('click', { logKey: 'test', params: { hello: 'world' } }); // 触发自定义元素点击事件 * @param eventType 事件类型,默认为 'click' 。 * @param eventDetail 事件自定义参数可以为空。不为空触发 CustomEvent 。 * @param element 目标元素,默认为 document.body ,支持传 document 。 * @returns * @category Tools-事件相关 */ export declare function emitEvent(eventType?: string, eventDetail?: any, element?: HTMLElement | null): void; /** * 禁用冲突事件,条码枪、关闭窗口快捷键等。 * @example * document.addEventListener('keydown', disableConflictEvent); /// 进入页面后禁用冲突事件 * document.removeEventListener('keydown', disableConflictEvent); /// 退出页面后关闭监听 * @param event 触发事件 * @returns * @category Tools-事件相关 */ export declare function disableConflictEvent(event: any): boolean; /** * 阻止冒泡事件&阻止默认行为&阻止事件捕获 * @example * offDefaultEvent(event); /// 阻止冒泡事件&阻止默认行为&阻止事件捕获 * @param event 事件 * @returns * @category Tools-事件相关 */ export declare function offDefaultEvent(event: any): boolean; /** * 在打印预览中打印指定元素,并设置样式。 * 需在浏览器打印设置中-更多设置-开启背景与图形打印选项 * @example * printElement('#print-table', { * bodyStyle: { * padding: '10px', * backgroundColor: 'red', * }, * }); * @param selector - 要打印的元素的 CSS 选择器。 * @param styles - iframe 的 style 配置对象。 * @property {any} style - iframe 的基本样式。 * @property {any} bodyStyle - iframe 的 body 样式。 * @property {any} htmlStyle - iframe 的 html 样式。 * @returns * @category Dom-工具方法 */ export declare function printDom(selector: string, styles?: { iframeStyle?: any; bodyStyle?: any; htmlStyle?: any; }): any; /** * 创建全局 click 事件埋点与回调,也可使用 `emitEvent` 主动触发。 * 若 log-* 属性报错,记得 eslint 关闭 `'react/no-unknown-property': 'warn'`。 * @example * const clickListenerObj = createClickLogListener((event, key, data) => console.log({ event, key, data })); /// 页面加载完成后创建监听器,取消监听器 clickListenerObj.cancel(); 。 * <div log-click={JSON.stringify({ trigger: 'click', params: { name: '普通日志' }, logKey: 'example-key-0' })}>普通埋点元素</div> /// 普通埋点元素写法 * <div log-click={JSON.stringify({ maxSequence: 2, sequence: 1, trigger: 'click', params: { name: '固定顺序日志' }, logKey: 'example-key-1' })}>固定顺序埋点元素 1</div> /// 固定顺序埋点元素写法 * <div log-click={JSON.stringify({ maxSequence: 2, sequence: 2, trigger: 'click', params: { name: '固定顺序日志' }, logKey: 'example-key-1' })}>固定顺序埋点元素 2</div> /// 固定顺序埋点元素写法 * <div log-click={JSON.stringify({ isOrder: true, orderKey: '元素 1', params: { name: '非固定顺序日志' }, logKey: 'example-key-2' })}>非固定顺序埋点元素 1</div> /// 非固定顺序埋点元素写法 * <div log-click={JSON.stringify({ isOrder: true, orderKey: '元素 2', params: { name: '非固定顺序日志' }, logKey: 'example-key-2' })}>非固定顺序埋点元素 2</div> /// 非固定顺序埋点元素写法 * @param callback 监听 Track 回调 * @returns * @category Log-日志埋点 */ export declare function createClickLogListener(callback?: any): any; /** * 创建全局 scroll 事件埋点与回调 * 若 log-* 属性报错,记得 eslint 关闭 `'react/no-unknown-property': 'warn'`。 * @example * const cancel = createScrollLogListener(document.querySelector('.demo-scroll-dom'), (event, eventKey, data) => console.log({ event, eventKey, data })); /// 页面加载完成后创建监听器,取消监听器 cancel(); 。 * <div log-scroll={JSON.stringify({ logKey: 'example-scroll-X' })}>{...X 滚动埋点元素...}</div> /// 滚动埋点元素 * @param element 元素 * @param callback 监听 Track 回调 * @param delay 防抖延迟 * @param threshold 触发滚动事件阈值 * @returns * @category Log-日志埋点 */ export declare function createScrollLogListener(element?: any, callback?: any, delay?: number, threshold?: number): (() => void) | undefined; /** * 创建全局 change 事件埋点与回调,也可使用 `emitEvent` 主动触发。 * @example * const cancel = createChangeLogListener((event, key, data) => console.log({ event, key, data })); /// 页面加载完成后创建监听器,取消监听器 cancel(); 。 * <div log-change={JSON.stringify({ logKey: 'div-input-change-0' })}><input /></div> /// 父元素总监听 * <input log-change={JSON.stringify({ logKey: 'input-change-1' })} /> /// 普通监听 * @param callback 监听 Track 回调 * @returns * @category Log-日志埋点 */ export declare function createChangeLogListener(callback?: any): () => void; /** * 创建间隔时间日志 * @param eventName 事件名称 * @param eventParams 参数列表 * @param callback 回调函数 * @returns * @example * // 创建日志实例 * const myCustomLog = createTimeLogListener('扫描时长', { menuCode: 'Login' }); * // 开始计时,如果短时间多个实例计时,最好增加 key 参数,没有 key 默认 key 为 'undefined' 。 * myCustomLog.start({ user: 'admin' }); * myCustomLog.start({ user: 'admin123', key: 'custom-123' }); * myCustomLog.start({ user: 'admin456', key: 'custom-456' }); * // ... 执行一些操作 ... * // ... 中途更新一些参数 ... * myCustomLog.update({ userAgent: 'Chrome' }); * myCustomLog.update({ test: 'test' }); * myCustomLog.update({ test: 'test123', key: 'custom-123' }); * // 结束计时并记录日志 * myCustomLog.end({ isLogin: true }); * myCustomLog.end({ isLogin: false, key: 'custom-123' }); * myCustomLog.end({ isLogin: true, key: 'custom-456' }); * // 输出到控制台和执行回调 * // 输出格式包括:logKey, ms, s, menuCode, user, isLogin, userAgent, test * myCustomLog.clear(); // 清空所有缓存数据 * // react * const log = useMemo(() => createTimeEventLog('扫描时长', { menuCode: 'scan' }), []); * @category Log-日志埋点 */ export declare function createTimeLogListener(eventName: string, eventParams?: {}, callback?: (logInfo: any, logKey: string) => void): { clear: () => void; start(moreParams?: {}): void; update(moreParams?: {}): void; end(moreParams?: {}): void; }; /** * 合并类名 emotion-js * @example * cx('class1', 'class2', { 'class3': true, 'class4': false }, null, undefined); /// "class1 class2 class3" * @param classNames 要合并的类名、对象或空值 * @returns * @category Dom-工具方法 */ export declare function cx(...classNames: any[]): string; /** * 去除字符串中的元素标记 * @example * removeTag('<div>Hello Wife</div>'); /// 'Hello Wife' * @param str 字符串 * @returns * @category Dom-工具方法 */ export declare function removeTag(str: string): string; /** * 创建 BroadcastChannel 实例 * @example * const channel = createBroadcastChannel('my-channel'); * const removeListener = channel.listen((event) => { * console.log({ type: event.type, data: event.message }); * }); * channel.send('message', { message: 'Hello' }); * channel.getChannel(); // BroadcastChannel 实例 * removeListener(); // 移除监听器 * channel.close(); // 关闭通道 * @param channelName 通道名称 * @returns * @category Dom-工具方法 */ export declare function createBroadcastChannel(channelName: string): { send: (type: string, message: unknown) => void; listen: (callback: (event: { type: string; message: unknown; }) => void) => () => void; getChannel: () => BroadcastChannel; close: () => void; }; /** * 为指定元素创建自定义滚动条 * @example * // 创建一个垂直样式的滚动条,控制横向滚动 * const destroy = createCustomScroll('#my-element', { * scrollCssDirection: 'vertical', // 滚动条样式方向 * scrollCtrlDirection: 'x', // 控制滚动方向 * scrollContainer: '.custom-container', // 滚动条插入位置 * scrollClassName: 'my-scroll', // 自定义类名 * }); * * // 销毁滚动条 * destroy(); * @param selector 目标元素选择器 * @param options 配置选项 * @param {('horizontal'|'vertical')} [options.scrollCssDirection='vertical'] 滚动条样式方向 * @param {('x'|'y')} [options.scrollCtrlDirection='y'] 控制滚动方向 * @param {string} [options.scrollContainer] 滚动条插入的容器选择器,默认插入到目标元素顶部 * @param {string} [options.scrollClassName='custom-scroll'] 滚动条容器类名 * @returns * @category Dom-工具方法 */ export declare function createCustomScroll(selector: string, options?: { scrollCssDirection?: 'horizontal' | 'vertical'; scrollCtrlDirection?: 'x' | 'y'; scrollContainer?: string; scrollClassName?: string; }): () => void; //# sourceMappingURL=index.d.ts.map