Vue手写封装模态弹出框(若水封装,亲测可用)

组件代码

<template>
  <!-- 遮罩层 -->
  <div v-show="isMask" class="mask"  @touchmove.stop @mousewheel.stop>
      <!-- 内容 -->
      <slot></slot>
 
  </div>
</template>

<script>
export default {
  props: {
    //   是否显示加载动画
    isMask: {
      type: Boolean,
      default: true
    }
  },
  methods: {}
}
</script>
<style lang="less" scoped>
.mask {
  width: 100vw;
  height: 100vh;
  position: fixed;
  z-index: 1000;
  top: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
align-items: center;
}
</style>

使用

<template>
  <div class="box">
    <eject :isMask="isMask">
      <div class="teacherDetails">
      </div>
    </eject>
  </div>
</template>

<script>
import eject from '@/components/mask'
export default {
  name: '',
  components: {
    eject
  },
  data() {
    return {
      isMask: true //是否显示模态框
    }
  },
  computed: {},
  watch: {
    isMask(newisMask, oldisMask) {
      // 当模态框打开时,阻止当前页面滚动,当模态框关闭时恢复滚动(不影响模态框中的元素滚动)
      if (newisMask) {
        this.stopMove()
      } else {
        this.StartMove()
      }
    }
  },
  created() {
    this.stopMove()
  },
  methods: {
    /**
     * @function 停止页面滚动(组件必须要这个)
     */
    stopMove() {
      let m = function(e) {
        e.preventDefault()
      }
      document.body.style.overflow = 'hidden'
      document.addEventListener('touchmove', m, { passive: false }) //禁止页面滑动
    },
    /**
     * @function 开启页面滚动(组件必须要这个)
     */
    StartMove() {
      let m = function(e) {
        e.preventDefault()
      }
      document.body.style.overflow = '' //出现滚动条
      document.removeEventListener('touchmove', m, { passive: true })
    },
  },
}
</script>

<style scoped lang="less">
.teacherDetails {
  position: relative;
  box-sizing: border-box;
  width: 960px;
  height: 530px;
  background: #fff;
  border-radius: 10px;

}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端J先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值