import { defineComponent, computed, reactive, onMounted } from 'vue'; import styles from './index.module.less'; // 底部拖动区域 export default defineComponent({ name: 'dragBom', emits: ['guideDone'], props: { /** 是否显示引导 */ showGuide: { type: Boolean, default: false } }, setup(props, { emit }) { const data = reactive({ guidePos: 'bottom' as 'bottom' | 'left' | 'right' }); const initGuidePos = () => { const pageHeight = document.documentElement.clientHeight || document.body.clientHeight; const pageWidth = document.documentElement.clientWidth || document.body.clientWidth; const guideHeight = document.querySelector('.bom_guide')?.clientHeight || 0; const guideWidth = document.querySelector('.bom_guide')?.clientWidth || 0; const dragBBox = document .querySelector('.bom_drag') ?.getBoundingClientRect(); const dragTop = dragBBox?.top || 0; const dragLeft = dragBBox?.left || 0; // 引导页出现在下边 if (pageHeight - dragTop > guideHeight) { data.guidePos = 'bottom'; } else { // 引导页出现在左边or右边 data.guidePos = dragLeft > guideWidth ? 'left' : 'right'; } }; onMounted(() => { setTimeout(() => { initGuidePos(); }, 0); }); return () => ( <>
{props.showGuide && (
emit('guideDone')}>
{ e.stopPropagation(); emit('guideDone'); }}>
)} ); } });