ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ant-design-vue FloatButton 悬浮按钮组件完全指南:从基础用法到 BackTop 与菜单分组

ant-design-vue FloatButton 悬浮按钮组件完全指南:从基础用法到 BackTop 与菜单分组 ant-design-vue FloatButton 悬浮按钮组件完全指南从基础用法到 BackTop 与菜单分组【免费下载链接】ant-design-vue An enterprise-class UI components based on Ant Design and Vue. 项目地址: https://gitcode.com/gh_mirrors/an/ant-design-vue导读FloatButton 是 ant-design-vue 自4.0.0版本起提供的一类全局悬浮操作组件适用于无论用户浏览到页面何处都能看到的入口型按钮场景例如客服咨询、回到顶部、帮助文档等。本文以 components/float-button/index.en-US.md 为骨架结合组件源码与官方 Demo系统讲解 FloatButton 的通用 API、事件、FloatButton.Group菜单分组模式以及FloatButton.BackTop回到顶部能力的完整用法与底层实现原理帮助你直接上手并在真实业务中正确选型。When To Use什么场景该用悬浮按钮官方文档给出的使用时机非常明确适用于以下两类场景网站上的全局功能global functionality on the site比如全局客服、全局反馈入口、全局快捷导航无论浏览到何处都可以看见的按钮悬浮于页面边缘不随滚动而消失始终向用户提供可达的操作入口。从组件源码看FloatButton 内部由 FloatButton.tsx、FloatButton.GroupFloatButtonGroup.tsx与FloatButton.BackTopBackTop.tsx三部分组成三者通过 index.ts 挂载为FloatButton.Group与FloatButton.BackTop两个静态子组件因此既可以直接使用三个独立组件也可以统一从FloatButton上访问。通用 API 详解Common API文档将 FloatButton 的公共参数统一整理如下这些参数对基础按钮、Group、BackTop均适用属性说明类型默认值版本icon设置按钮的图标组件slot-description文字及其它内容string | slot-tooltip气泡卡片的内容string | slot-type设置按钮类型default|primarydefaultshape设置按钮形状circle|squarecirclehref点击跳转的地址指定后按钮行为与a链接一致string-target相当于a标签的 target 属性href存在时生效string-badge给 FloatButton 附加徽标不支持status及相关属性BadgeProps-参数背后的源码实现以上参数定义在 interface.ts 中关键实现细节如下type与shape通过stringType约束取值类型别名FloatButtonType default | primary、FloatButtonShape circle | square见 interface.ts默认值由initDefaultProps注入type: default、shape: circle见 FloatButton.tsx渲染分支当传入href时组件渲染为a锚点元素否则渲染为button typebuttontarget仅在href存在时随属性透传见 FloatButton.tsx徽标与气泡的嵌套结构渲染时按钮节点由Tooltip气泡包裹Badge徽标内部再承载icon与description内容区见 FloatButton.tsxdescription 的约束源码在开发环境下会发出 warning——当shape circle时不允许使用description因为圆形空间过窄文字只建议在square形态下使用且应保持精简见 FloatButton.tsx当既未提供icon插槽、也没有description时内容区会回退渲染默认图标FileTextOutlined见 FloatButtonContent.tsx。基础用法示例最基础的用法仅需一个空按钮点击事件通过click事件监听参考 demo/basic.vuetemplate a-float-button clickhandleClick / /template script langts setup const handleClick () console.log(click); /script自定义图标与类型通过#icon插槽自定义图标配合typeprimary突出主操作参考 demo/type.vue 与 demo/group-menu.vuetemplate a-float-button typeprimary template #icon CustomerServiceOutlined / /template /a-float-button /template script langts setup import { CustomerServiceOutlined } from ant-design/icons-vue; /script方形按钮与文字描述description支持字符串或插槽两种形式但必须配合shapesquare且因空间有限推荐使用精简的短文案参考 demo/description.vuetemplate a-float-button shapesquare descriptionHELP INFO :style{ right: 24px } template #icon FileTextOutlined / /template /a-float-button /template script langts setup import { FileTextOutlined } from ant-design/icons-vue; /script气泡提示Tooltip设置tooltip属性即可在悬停时显示气泡卡片同样支持字符串与插槽两种写法参考 demo/tooltip.vuetemplate a-float-button tooltipHELP INFO :style{ right: 24px } / a-float-button :style{ right: 94px } template #tooltip divDocuments/div /template /a-float-button /template源码中气泡始终以placementleft固定在按钮左侧见 FloatButton.tsx无需额外配置。通用事件Common Events事件名说明回调参数版本click设置处理click事件的处理器(event) void-click事件在 interface.ts 中以functionTypeMouseEventHandler()声明组件将原生点击事件回调透出。注意在BackTop场景下click回调会在执行回到顶部滚动之后触发见 BackTop.tsx因此它既可以用于埋点统计也不会影响回滚动画的执行。FloatButton.Group菜单分组模式FloatButton.Group用于将多个悬浮按钮聚合为垂直展开的菜单其独立参数如下属性说明类型默认值版本shape设置包含的 FloatButton 按钮形状circle|squarecircletrigger触发方式设置后即为菜单模式click|hover-open(v-model)菜单是否可见受控展开boolean-Group 事件事件名说明回调参数版本openChange展开/收起状态变化时执行的回调(open: boolean) void-菜单模式示例设置trigger即可开启菜单模式支持hover悬停展开与click点击展开两种触发方式参考 demo/group-menu.vuetemplate a-float-button-group triggerclick typeprimary :style{ right: 24px } template #icon CustomerServiceOutlined / /template a-float-button / a-float-button template #icon CommentOutlined / /template /a-float-button /a-float-button-group a-float-button-group triggerhover typeprimary :style{ right: 94px } template #icon CustomerServiceOutlined / /template a-float-button / a-float-button template #icon CommentOutlined / /template /a-float-button /a-float-button-group /template script langts setup import { CustomerServiceOutlined, CommentOutlined } from ant-design/icons-vue; /scriptGroup 的底层行为解析从 FloatButtonGroup.tsx 源码可以看到几个值得注意的实现细节受控状态open通过useMergedState(false, { value: computed(() props.open) })实现受控 非受控双向合并配合v-model:open即update:open事件使用见 FloatButtonGroup.tsxshape 向下传递Group 通过 Vue 的provide/inject向子级 FloatButton 注入shape子按钮在渲染时优先采用 Group 的 shape见 context.ts 与 FloatButton.tsx因此无需在子按钮上重复声明点击模式的全局监听当trigger click时组件会在document上注册点击监听点击主按钮切换展开状态点击菜单外部区域则自动收起hover模式则通过onMouseenter/onMouseleave控制开合见 FloatButtonGroup.tsx图标自动切换菜单展开时主按钮图标自动切换为CloseOutlined收起时展示#icon插槽内容未提供则回退到FileTextOutlined见 FloatButtonGroup.tsx。FloatButton.BackTop回到顶部BackTop是悬浮按钮最典型的业务应用——提供一键回到页面顶部的能力其独立参数如下属性说明类型默认值版本duration回到顶部所需时间msnumber450target设置需要监听其滚动事件的元素() HTMLElement() windowvisibilityHeight滚动高度达到此值才显示 BackTop 按钮number400基础用法直接插入页面即可向下滚动超过visibilityHeight默认 400px后按钮淡入显示参考 demo/back-top.vuetemplate div :style{ height: 500vh, padding: 10px } divScroll to bottom/div divScroll to bottom/div ... a-back-top / /div /templateBackTop 的源码级原理BackTop.tsx 完整展示了这个看似简单的组件的内部机制默认值visibilityHeight: 400、target: () window、duration: 450见 BackTop.tsx滚动监听与节流组件挂载后通过bindScrollEvent向target容器注册scroll监听并使用throttleByAnimationFrame见 components/_util/throttleByAnimationFrame.ts将高频滚动事件按动画帧节流每次滚动用getScroll(e.target, true)读取垂直滚动距离并与visibilityHeight比较以决定按钮显隐见 BackTop.tsx平滑回滚动画点击时调用scrollTo(0, { getContainer: target, duration })实现见 components/_util/scrollTo.ts按duration毫秒平滑滚动至顶部随后触发click回调见 BackTop.tsx生命周期兜底组件在onMounted、onActivated时绑定滚动监听在onDeactivated、onBeforeUnmount时解绑并cancel节流函数target变化时也会先解绑再重新绑定避免内存泄漏见 BackTop.tsx显示动画按钮外层包裹Transitionfade过渡通过v-show控制显隐实现淡入淡出效果见 BackTop.tsx。自定义滚动容器与图标当页面滚动发生在某个内部容器而非window时通过target指定容器图标同样可用#icon插槽替换未提供时默认使用VerticalAlignTopOutlined见 BackTop.tsxtemplate a-back-top :target() scrollContainer :visibility-height300 :duration600 clickonBackTopClick template #icon UpOutlined / /template /a-back-top /template组合使用徽标、链接与全局安装徽标Badgebadge属性可直接附加徽标数字但官方明确说明不支持status及相关属性类型定义见 interface.tsOmitBadgeProps, status | text | title | children完整徽标参数可参考 components/badge/index.en_US.md示例见 demo/badge.vue链接跳转传入href与target后按钮即变为a链接适合跳转到客服页/帮助文档类场景全局注册FloatButton、FloatButton.Group、FloatButton.BackTop在 index.ts 中通过app.component统一注册且FloatButton.Group、FloatButton.BackTop也作为静态属性挂载因此app.use(FloatButton)后即可在模板中直接使用a-float-button、a-float-button-group、a-back-top也可以按需从ant-design-vue中单独导入FloatButtonGroup、BackTop。小结FloatButton 家族以三个层次覆盖了悬浮操作的完整需求单个FloatButton提供图标、文字、气泡、徽标、链接与default/primary两种视觉类型FloatButton.Group通过trigger与v-model:open实现点击/悬停两种菜单交互FloatButton.BackTop则基于节流滚动监听与scrollTo动画提供平滑回顶体验。官方 API 表格之外FloatButton.tsx、FloatButtonGroup.tsx、BackTop.tsx 及 components/float-button/demo 下的 10 个示例是进一步探索的最佳起点更多说明可对照中文版文档 index.zh-CN.md 阅读。【免费下载链接】ant-design-vue An enterprise-class UI components based on Ant Design and Vue. 项目地址: https://gitcode.com/gh_mirrors/an/ant-design-vue创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表