fs-mask.vue 823 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <view
  3. class="fs-mask"
  4. :class="{'fs-mask-blur': blurable}"
  5. :style="{'zIndex': zIndex}"
  6. v-if="modelValue"
  7. @click="handleMask">
  8. </view>
  9. </template>
  10. <script setup>
  11. const props = defineProps({
  12. modelValue: Boolean,
  13. blurable: Boolean,
  14. zIndex: {
  15. type: Number,
  16. default: 899
  17. },
  18. maskClickable: {
  19. type: Boolean,
  20. default: true
  21. },
  22. bgColor: {
  23. type: String,
  24. default: 'rgba(0, 0, 0, 0.5)'
  25. }
  26. })
  27. const emits = defineEmits(['update:modelValue','close'])
  28. const handleMask = () => {
  29. if (props.maskClickable) {
  30. emits('update:modelValue', false)
  31. emits('close')
  32. }
  33. }
  34. </script>
  35. <style lang="scss">
  36. .fs-mask{
  37. position: fixed;
  38. top: var(--window-top);
  39. right: 0;
  40. bottom: var(--window-bottom);
  41. left: 0;
  42. background-color: v-bind(bgColor);
  43. &-blur{
  44. backdrop-filter: blur(12rpx);
  45. }
  46. }
  47. </style>