import { ref, onMounted } from 'vue' ; export function useCalculateSwiperHeight ( headerSelector: string = '.header-search' , tabsWrapperSelector: string = '.u-tabs .u-tabs__wrapper' ) { const swiperHeight = ref< number> ( 0 ) ; const getSystemInfo = ( ) => { return new Promise < UniApp. GetSystemInfoResult> ( ( resolve ) => { uni. getSystemInfo ( { success: resolve } ) ; } ) ; } ; const getRect = ( selector: string ) => { return new Promise < UniNamespace. NodeInfo | null > ( ( resolve ) => { uni. createSelectorQuery ( ) . select ( selector) . boundingClientRect ( ( res ) => { const result = Array. isArray ( res) ? res[ 0 ] : res; resolve ( result as UniNamespace. NodeInfo) ; } ) . exec ( ) ; } ) ; } ; const calculateHeight = async ( ) => { try { const [ searchRect, tabsRect, sysInfo] = await Promise. all ( [ getRect ( headerSelector) , getRect ( tabsWrapperSelector) , getSystemInfo ( ) ] ) ; if ( ! searchRect || ! tabsRect || ! sysInfo) { console. error ( '未能获取到必要的布局信息' ) ; return ; } swiperHeight. value = sysInfo. windowHeight - ( searchRect. height || 0 ) - ( tabsRect. height || 0 ) ; } catch ( error) { console. error ( '计算高度时发生错误:' , error) ; } } ; onMounted ( ( ) => { calculateHeight ( ) ; } ) ; return { swiperHeight, recalculate: calculateHeight} ;
}
import { useCalculateSwiperHeight } from '@/hooks/useCalculateSwiperHeight' ;
const { swiperHeight } = useCalculateSwiperHeight ( '.header-search' , '.u-tabs .u-tabs__wrapper' ) ;
const { swiperHeight } = useCalculateSwiperHeight ( '.header-search' , '.u-tabs >>> .u-tabs__wrapper' ) ;