H5 van-popup全屏弹窗模拟回退效果,左上角返回(支持物理、侧滑返回)

1、弹框组件

Vue.component('custom-agreement', {
    template: `
     <van-popup
      class="custom-popup"
      v-model="visible"
      :overlay="overlay"
      :style="{ width: width, height: height }"
      :duration="animateDuration"
      @open="openHandler"
      @close="closeHandler"
    >
      <slot name="popupContent"></slot>
     </van-popup>
    `,
    props: {
      visible: {
        type: Boolean,
        default: false
      },
      width: {
        type: String,
        default: '100%'
      },
      height: {
        type: String,
        default: '100%'
      },
      // 是否显示遮罩层
      overlay: {
        type: Boolean,
        default: false
      },
      // 过渡动画时长,单位为毫秒
      animateDuration: {
        type: Number,
        default: 0
      }
    },
    methods: {
      openHandler () {
        this.$emit('open-handler')
      },
      closeHandler () {
        this.$emit('close-handler')
      }
    }

使用方式:

<custom-agreement :visible.sync="agreementVisible" :animate-duration="animateDuration" @open-handler="openHandler"
  @close-handler="closeHandler">
  <template slot="popupContent">
    <div class="agreementContainer">
      <div class="agreementHeader">
        <i class="el-icon-arrow-left" @click="agreementVisible = false"></i>
        <div class="agreementTitleText">{{agreementInfo.title}}</div>
      </div>
      <div class="agreementContent" v-html="agreementInfo.content"></div>
    </div>
  </template>
</custom-agreement>

data() {
  return {
    agreementVisible: false,
    animateDuration: 0.3,
    agreementInfo: {},
  }
}

methods: {
  handlerAuthorizationFile () {
    this.agreementVisible = true
  },
  openHandler () {
    window.history.pushState(null, null, '#') // 模拟新的一页history记录
    window.addEventListener('popstate', this.popstateHandler)
  },
  popstateHandler () {
    this.animateDuration = 0
    this.agreementVisible = false
    this.applyVisible = true
  },
  closeHandler () {
    window.removeEventListener('popstate', this.popstateHandler, false)
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值