vue 自定义popup组件并支持scroll组件

本来是使用第三方库 vant的vue 组件库 的popup,后来在popup中使用better-scroll插件的时候,出现并不兼容的情况,也就自己搭建一个popu插件,中间遇到很多问题,都会记录一下,给自己一些总结!

popup组件实现思路

首先是模仿vant的popup组件的功能:vant-popup

1.popup组件开发与样式编写(一个遮罩层,一个显示层)。

2.组件引用(目前是选择的组件导入的方法,没有选择使用插件this.$popup(),主要是用户可以通过组件自定义传参,插件的方式不好实现)。

代码

popup.vue

<template>
  <div >
<!--    遮罩层-->
    <transition name="gh-fade" >
      <div   class="gh-overlay "
             v-if="isShow"
             ref="overlay"
             @click="changShowStat(false)"
             style="z-index: 2019;"
             :style="overlayStyle">
      </div>
    </transition>
    <!--    内容层-->
    <transition :name="'gh-slide-'+position">
       <div  class="gh-popup "
             v-if="isShow"
             ref="popup"
            :class="[
              getPosition,
              {'gh-popup--round':round}
            ]"
            style="z-index:2020"
            :style="styles">
        <slot></slot>
        <i  v-if="closeable"
            @click="changShowStat(false)"
            tabindex="0"
            :class="{
              'gh-icon-cross': closeable && !closeIcon ,
            }"
           class="gh-icon  gh-popup__close-icon gh-popup__close-icon--top-right">
          <img v-if="closeIcon" class="gh-icon__image" :src="closeIcon" alt="">
        </i>
      </div>
    </transition>
  </div>
</template>

<script>
  export default {
    name: "Popup",
    props:{
      value:Boolean,
      overlayStyle:{
        type:Object
      },
      height:{
        type:String,
        default: 'none'
      },
      width:{
        type:String,
        default: 'none'
      },
      styles:{
        type:Object
      },
      position:{
        type:String
      },
      closeable:{
        type:Boolean,
        default:false
      },
      closeIcon:{
        type:String
      },
      round:{
        type:Boolean,
        default:false
      },
    },
    data(){
      return{
        isShow:this.value
      }
    },
    mounted(){
        this.$nextTick(() => {
            const body = document.querySelector("body");
            if (body.append) {
                body.append(this.$el);
  
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值