uni-app popover弹窗插件需求

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app popover弹窗插件需求

mui中的popover弹窗

信息类别 详情
开发环境 未提及
版本号 未提及
项目创建方式 未提及
1 回复

在uni-app中,实现一个popover弹窗插件,通常涉及自定义组件的开发和使用。以下是一个简单的popover弹窗插件的实现案例,包含组件定义和使用示例。

1. 创建Popover组件

首先,创建一个名为Popover.vue的自定义组件。

<template>
  <view v-if="visible" class="popover" :style="popoverStyle">
    <slot></slot>
    <view class="popover-arrow" :style="arrowStyle"></view>
  </view>
</template>

<script>
export default {
  props: {
    visible: {
      type: Boolean,
      default: false
    },
    position: {
      type: String,
      default: 'bottom'
    },
    arrowOffset: {
      type: Number,
      default: 10
    }
  },
  computed: {
    popoverStyle() {
      return {
        display: this.visible ? 'block' : 'none',
        position: 'absolute',
        // 根据position属性动态设置位置
        ...this.getPositionStyle()
      };
    },
    arrowStyle() {
      return this.getArrowStyle();
    }
  },
  methods: {
    getPositionStyle() {
      // 根据position属性返回相应的样式对象
      // 示例只包含bottom和top两种情况,可以扩展left和right
      if (this.position === 'bottom') {
        return { top: `${this.arrowOffset * 2}px`, left: '50%', transform: 'translateX(-50%)' };
      } else if (this.position === 'top') {
        return { bottom: `${this.arrowOffset * 2}px`, left: '50%', transform: 'translateX(-50%)' };
      }
      return {};
    },
    getArrowStyle() {
      // 根据position属性返回箭头样式
      if (this.position === 'bottom') {
        return { borderWidth: '0 10px 10px 10px', borderColor: 'transparent transparent #fff transparent' };
      } else if (this.position === 'top') {
        return { borderWidth: '10px 10px 0 10px', borderColor: '#fff transparent transparent transparent' };
      }
      return {};
    }
  }
};
</script>

<style scoped>
.popover {
  padding: 10px;
  background-color: #fff;
  border-radius: 5px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.popover-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-style: solid;
}
</style>

2. 使用Popover组件

在父组件中使用Popover.vue组件:

<template>
  <view>
    <button @click="togglePopover">Toggle Popover</button>
    <Popover :visible="popoverVisible" position="bottom">
      <view>Popover Content</view>
    </Popover>
  </view>
</template>

<script>
import Popover from '@/components/Popover.vue';

export default {
  components: {
    Popover
  },
  data() {
    return {
      popoverVisible: false
    };
  },
  methods: {
    togglePopover() {
      this.popoverVisible = !this.popoverVisible;
    }
  }
};
</script>

以上代码展示了如何在uni-app中创建一个基本的popover弹窗插件,并通过父子组件通信控制其显示与隐藏。你可以根据实际需求进一步扩展和完善这个组件,例如添加更多的位置选项、动画效果等。

回到顶部