/** * vigilkids 产品专属 DOM 交互 * * 使用场景: * - admin preview-host:预览渲染完成后激活 DOM 交互 * - marketing 站点(Nuxt):innerHTML 直出 HTML 后 onMounted 激活交互 * * 设计要点: * - 幂等绑定:重复调用 setupInteractions 不会重复绑定事件 * - 可销毁:提供 destroyInteractions 清理 embla 实例和绑定标记,避免卸载后内存泄漏 * - 不破坏 vDOM:banner 隐藏用 style.display,而非 el.remove(),避免外层 Vue 重渲染冲突 */ /** * 推荐文章轮播(Module 4) * - 桌面 ≥1025px:超过 3 张卡片才启用轮播,3 张及以下保持静态布局 * - 移动端 ≤1024px:超过 1 张卡片就启用轮播 * * 幂等:容器级 WeakMap 保证重复调用不会重复挂媒体查询或重复 new embla * 内存:embla 实例、媒体查询监听和 dot 点击都在 destroyInteractions 中统一释放 */ export declare function setupCarousel(root?: Document | HTMLElement): void; /** * 留存 Banner(Module 5) * * 关闭策略:style.display = 'none' * - 不调用 el.remove():marketing 侧 Nuxt 在 v-html 容器下,Vue diff 会检测 DOM 差异导致警告 * - admin 侧走 Vue 组件路径不进入本函数;innerHTML 场景靠本函数统一管理显隐 * * localStorage key 规则:`retention-banner-dismissed:{dismissKey}` */ export declare function setupRetentionBanner(root?: Document | HTMLElement): void; /** * 激活所有产品交互 * 幂等:所有子函数都有各自的绑定保护,重复调用安全 */ export declare function setupInteractions(root?: Document | HTMLElement): void; /** * 销毁产品交互 * * 必须在组件卸载前调用,避免: * - embla 实例持有 viewport 引用 + 媒体查询监听导致内存泄漏 * - dot 点击事件和可见状态残留,影响下次重挂载 * * 不强制解绑 FAQ document delegate: * - document 级委托不持有 root 引用,卸载不会产生泄漏 * - 跨多次 mount/unmount 复用同一 listener 反而更省 */ export declare function destroyInteractions(root?: Document | HTMLElement): void;