You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!-- 装修基础组件 : 悬浮按钮 -- >
< template >
<!-- 模态背景 : 展开时显示 , 点击后折叠 -- >
< view class = "modal-bg" v-if ="fabRef?.isShow" @click="handleCollapseFab" > < / view >
< ! - - 悬 浮 按 钮 - - >
< uni -fab
ref = "fabRef"
horizontal = "right"
vertical = "bottom"
:direction ="state.direction"
:pattern ="state.pattern"
:content ="state.content"
@trigger ="handleOpenLink"
/ >
< / template >
< script setup >
/**
* 悬浮按钮
*/
import sheep from '@/sheep' ;
import { reactive , ref , unref } from 'vue' ;
import { onBackPress } from '@dcloudio/uni-app' ;
// 定义属性
const props = defineProps ( {
data : {
type : Object ,
default ( ) { } ,
}
} )
// 悬浮按钮配置: https://uniapp.dcloud.net.cn/component/uniui/uni-fab.html#fab-props
const state = reactive ( {
// 可选样式配置项
pattern : [ ] ,
// 展开菜单内容配置项
content : [ ] ,
// 展开菜单显示方式: horizontal-水平显示, vertical-垂直显示
direction : '' ,
} ) ;
// 悬浮按钮引用
const fabRef = ref ( null ) ;
// 按钮方向
state . direction = props . data . direction ;
props . data ? . list . forEach ( ( item ) => {
// 按钮文字
const text = props . data ? . showText ? item . text : ''
// 生成内容配置项
state . content . push ( { iconPath : sheep . $url . cdn ( item . imgUrl ) , url : item . url , text } ) ;
// 生成样式配置项
state . pattern . push ( { color : item . textColor } ) ;
} ) ;
// 处理链接跳转
function handleOpenLink ( e ) {
sheep . $router . go ( e . item . url ) ;
}
// 折叠
function handleCollapseFab ( ) {
if ( unref ( fabRef ) ? . isShow ) {
unref ( fabRef ) ? . close ( ) ;
}
}
// 按返回值后,折叠悬浮按钮
onBackPress ( ( ) => {
if ( unref ( fabRef ) ? . isShow ) {
unref ( fabRef ) ? . close ( ) ;
return true ;
}
return false ;
} ) ;
< / script >
< style lang = "scss" scoped >
/* 模态背景 */
. modal - bg {
position : fixed ;
left : 0 ;
top : 0 ;
z - index : 11 ;
width : 100 % ;
height : 100 % ;
background - color : rgba ( # 000000 , 0.4 ) ;
}
< / style >