js-xxx
Version:
前端 JavaScript 常用函数/工具/方法库
553 lines • 22 kB
TypeScript
/**
* 开启全屏
* @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('<>&"'); /// '<>&"'
* @param str 字符串
* @returns
* @category Custom-转码
*/
export declare function str2html(str: string): string;
/**
* 实体字符转字符串
* @example
* html2str('<>&"'); /// '<>&"'
* @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