|
@@ -3,27 +3,44 @@ import styles from './index.module.less';
|
|
// 底部拖动区域
|
|
// 底部拖动区域
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'dragBom',
|
|
name: 'dragBom',
|
|
- emits: ["guideDone"],
|
|
|
|
- props: {
|
|
|
|
- /** 是否显示引导 */
|
|
|
|
- showGuide: {
|
|
|
|
- type: Boolean,
|
|
|
|
- default: false,
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
|
|
+ emits: ['guideDone'],
|
|
|
|
+ props: {
|
|
|
|
+ /** 是否显示引导 */
|
|
|
|
+ showGuide: {
|
|
|
|
+ type: Boolean,
|
|
|
|
+ default: false
|
|
|
|
+ }
|
|
|
|
+ },
|
|
setup(props, { emit }) {
|
|
setup(props, { emit }) {
|
|
const data = reactive({
|
|
const data = reactive({
|
|
- guidePos: "bottom" as "bottom" | "top",
|
|
|
|
|
|
+ guidePos: 'bottom' as 'bottom' | 'left' | 'right'
|
|
});
|
|
});
|
|
|
|
|
|
const initGuidePos = () => {
|
|
const initGuidePos = () => {
|
|
- const pageHeight = document.documentElement.clientHeight || document.body.clientHeight;
|
|
|
|
- const guideHeight = document.querySelector('.bom_guide')?.getBoundingClientRect().height || 0;
|
|
|
|
- const dragTop = document.querySelector('.bom_drag')?.getBoundingClientRect()?.top || 0;
|
|
|
|
- data.guidePos = pageHeight - dragTop < guideHeight ? "top" : "bottom";
|
|
|
|
- }
|
|
|
|
|
|
+ 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(() => {
|
|
onMounted(() => {
|
|
- initGuidePos();
|
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ initGuidePos();
|
|
|
|
+ }, 0);
|
|
});
|
|
});
|
|
return () => (
|
|
return () => (
|
|
<>
|
|
<>
|
|
@@ -31,14 +48,24 @@ export default defineComponent({
|
|
<div class={styles.box}></div>
|
|
<div class={styles.box}></div>
|
|
<div class={[styles.box, styles.right]}></div>
|
|
<div class={[styles.box, styles.right]}></div>
|
|
</div>
|
|
</div>
|
|
- {
|
|
|
|
- props.showGuide &&
|
|
|
|
- <div class={[styles.guide, data.guidePos === "top" && styles.guideTop, 'bom_guide']} onClick={() => emit("guideDone")}>
|
|
|
|
|
|
+ {props.showGuide && (
|
|
|
|
+ <div
|
|
|
|
+ class={[
|
|
|
|
+ styles.guide,
|
|
|
|
+ data.guidePos === 'left' && styles.guideLeft,
|
|
|
|
+ data.guidePos === 'right' && styles.guideRight,
|
|
|
|
+ 'bom_guide'
|
|
|
|
+ ]}
|
|
|
|
+ onClick={() => emit('guideDone')}>
|
|
<div class={styles.guideBg}></div>
|
|
<div class={styles.guideBg}></div>
|
|
- <div class={styles.guideDone} onClick={(e) => {e.stopPropagation();emit("guideDone")}}></div>
|
|
|
|
|
|
+ <div
|
|
|
|
+ class={styles.guideDone}
|
|
|
|
+ onClick={e => {
|
|
|
|
+ e.stopPropagation();
|
|
|
|
+ emit('guideDone');
|
|
|
|
+ }}></div>
|
|
</div>
|
|
</div>
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ )}
|
|
</>
|
|
</>
|
|
);
|
|
);
|
|
}
|
|
}
|