feat:新增悬浮卡片组件
This commit is contained in:
52
Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue
Normal file
52
Yi.Bbs.Vue3/src/components/UserInfoCard/index.vue
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<template>
|
||||||
|
<div v-if="modelValue" class="userInfo-card" ref="cardRef">
|
||||||
|
<!-- 个人信息内容 -->
|
||||||
|
<div class="info">
|
||||||
|
<h2>温海靖</h2>
|
||||||
|
<p>XXX</p>
|
||||||
|
<!-- 其他个人信息... -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, computed, nextTick, defineProps, defineEmits } from "vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
actOnRef: {},
|
||||||
|
});
|
||||||
|
const emit = defineEmits("update:modelValue");
|
||||||
|
const cardRef = ref(null);
|
||||||
|
const avatarRef = computed(() => props.actOnRef);
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
document.addEventListener("mouseup", (e) => {
|
||||||
|
// 如果点击的是按钮 则不执行下面的操作
|
||||||
|
if (avatarRef.value && cardRef.value) {
|
||||||
|
if (cardRef.value.contains(e.target)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!cardRef.value.contains(e.target)) {
|
||||||
|
// 点击的区域不包含在弹窗区域之内就关闭弹窗
|
||||||
|
emit("update:modelValue", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.userInfo-card {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: pink;
|
||||||
|
/* 卡片样式... */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user