当前位置:首页 > uni-app

uniapp公共弹窗

2026-03-04 23:24:09uni-app

实现公共弹窗的方法

在UniApp中实现公共弹窗可以通过组件化开发方式,将弹窗封装为全局组件,方便多处调用。

创建公共弹窗组件components目录下新建common-popup.vue文件,编写弹窗模板和逻辑:

uniapp公共弹窗

<template>
  <view class="popup-mask" v-if="visible" @click="close">
    <view class="popup-content" @click.stop>
      <slot></slot>
      <button @click="close">关闭</button>
    </view>
  </view>
</template>

<script>
export default {
  props: {
    visible: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    close() {
      this.$emit('update:visible', false)
    }
  }
}
</script>

<style>
.popup-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0,0,0,0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}
.popup-content {
  background: #fff;
  padding: 20px;
  border-radius: 10px;
  width: 80%;
}
</style>

全局注册组件main.js中全局注册组件:

import commonPopup from '@/components/common-popup.vue'
Vue.component('common-popup', commonPopup)

使用公共弹窗

在页面中引入并使用弹窗组件:

uniapp公共弹窗

<template>
  <view>
    <button @click="showPopup = true">显示弹窗</button>
    <common-popup :visible.sync="showPopup">
      <view>这里是弹窗内容</view>
    </common-popup>
  </view>
</template>

<script>
export default {
  data() {
    return {
      showPopup: false
    }
  }
}
</script>

扩展功能

支持不同弹窗类型 可以在组件中添加type属性,根据不同类型显示不同样式:

<template>
  <view class="popup-mask" v-if="visible" @click="close">
    <view :class="['popup-content', type]">
      <slot></slot>
      <button @click="close">关闭</button>
    </view>
  </view>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: 'default' // 支持default/warning/error等类型
    }
  }
}
</script>

<style>
.popup-content.warning {
  border-left: 5px solid #f0ad4e;
}
.popup-content.error {
  border-left: 5px solid #d9534f;
}
</style>

支持动画效果 添加过渡动画增强用户体验:

<template>
  <view>
    <view class="popup-mask" v-if="visible" @click="close">
      <view class="popup-content" :class="{ 'popup-show': visible }" @click.stop>
        <slot></slot>
      </view>
    </view>
  </view>
</template>

<style>
.popup-content {
  transform: scale(0.8);
  opacity: 0;
  transition: all 0.3s ease;
}
.popup-show {
  transform: scale(1);
  opacity: 1;
}
</style>

注意事项

  • 弹窗内容使用slot插槽实现高度自定义
  • 点击遮罩层关闭弹窗时注意阻止事件冒泡
  • 在iOS设备上可能出现滚动穿透问题,需要额外处理
  • 多端兼容性问题需要测试各平台表现

通过这种方式封装的公共弹窗组件,可以在整个UniApp项目中复用,保持统一的UI风格和交互体验。

标签: uniapp
分享给朋友:

相关文章

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中,找到"…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

uniapp广播

uniapp广播

全局事件通信 在UniApp中实现广播功能可通过全局事件机制完成,适用于跨页面或组件通信。使用uni.$emit、uni.$on、uni.$off等方法实现事件的触发、监听与移除。 发送广播(触发事…

uniapp 摇杆

uniapp 摇杆

uniapp 实现虚拟摇杆的方法 在uniapp中实现虚拟摇杆功能,通常需要结合canvas绘制和触摸事件监听。以下是具体实现方案: 基础摇杆实现 创建canvas画布 在template中添加c…

uniapp弹出选择

uniapp弹出选择

实现方式一:使用uni.showActionSheet 在UniApp中,可以通过uni.showActionSheet实现底部弹出的选择菜单。该方法支持自定义选项列表和回调处理。 代码示例:…

uniapp招聘开源

uniapp招聘开源

uniapp招聘开源项目推荐 以下是一些基于uniapp的开源招聘类项目,适合开发者参考或二次开发: DCloud招聘模板 官方提供的招聘类应用模板,包含职位列表、详情、投递等功能。 支持多端发布…