Search K
Appearance
🍵 欢迎来到技术茶馆 🍵
这里是一个分享技术、交流学习的地方
技术札记 | 茶馆周刊 | 工具书签 | 作品展示
让我们一起品茗技术,共同成长
Appearance
当项目只需要一两个对话框,却不得不引入整套 UI 组件库时,开发体验会瞬间变得沉重。autodialog.js 的目标很直接:提供一个纯 JavaScript 的 Dialog 核心,让原生 HTML、Vue、React 甚至 Svelte、Solid 都能用同一套调用方式弹出对话框,同时保留各自框架的状态与样式能力。
!important 的覆盖大战。AutoDialog 的核心是一个基于适配器(Adapter)的渲染层抽象:
export interface Adapter {
render: (content: any, options: { container: HTMLElement; panel: HTMLElement; [key: string]: any }) => void
unmount?: (panel: HTMLElement) => void
}HtmlAdapter、VueAdapter 或 ReactAdapter。Dialog.registerAdapter 注册即可。autodialog 满足简单场景,也可以实例化 Dialog 类以便更精细地控制多个独立弹窗。最基本的调用只需要一行代码:
import autodialog from 'autodialog.js'
autodialog.show('<div>Hello World!</div>')在 Vue / React 中依旧保持同一种 API:
// Vue 3
autodialog.show(MyDialogVue, {
props: { title: '你好 Vue' }
})
// React 18+
autodialog.show(MyDialogReact, {
props: { message: '你好 React' }
})常用选项包括:
title:可选标题文字。props:传递给组件的参数。showMask / allowScroll:控制遮罩与页面滚动。animation / animationClass / animationDuration:自定义动效。onBeforeOpen / onOpened / onBeforeClose / onClosed / onMaskClick:生命周期钩子。如果需要扩展到 Svelte:
import { Dialog } from 'autodialog.js'
import { mount } from 'svelte'
const SvelteAdapter = {
render(Component, { panel, props = {}, onClose }) {
const inst = mount(Component, { target: panel, props: { ...props, onClose } })
panel.__svelte__ = inst
},
unmount(panel) {
panel.__svelte__?.destroy?.()
delete panel.__svelte__
},
}
Dialog.registerAdapter({ name: 'svelte', adapter: SvelteAdapter })AutoDialog 像是一把“轻便瑞士军刀”,让最常用的 Dialog 功能回归简单:一套 API,在任何框架里调用自如。想告别重型组件库、保留各自技术栈的自由度,不妨试试 autodialog.js(GitHub:Auto-Plugin/autodialog.js,npm 同名包),给你的 UI 工具箱添一件趁手的家伙。