uniapp自定义弹窗组件|Modal模态框|Loading加载框

丁谧
• 阅读 11702

uni-app自定义Modal模态弹窗模板uniPop,uniapp仿微信、android、ios弹窗效果

uniPop内置多种动画效果、可供选择类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度及点击遮罩是否关闭

如上图:H5/小程序/App三端效果兼容性一致。(后续大图均展示App端)
uniapp自定义弹窗组件|Modal模态框|Loading加载框

引入方式

uniPop.vue弹窗组件两种引入方式:

1、在main.js里引入全局组件
import uniPop from './components/uniPop/uniPop.vue'
Vue.component('uni-pop', uniPop)

2、在页面引入组件

<template>
    <view class="container">
        ...
        
        <!-- 弹窗模板 -->
        <uni-pop ref="uniPop"></uni-pop>
    </view>
</template>
 
<script>
    import uniPop from './components/uniPop/uniPop.vue'
    export default {
        data() {
            return {
                ...
            }
        },
        components:{
            uniPop
        },
        ...
    }
</script>

下面展示几种弹窗类型及调用方式
msg信息框效果
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框

this.$refs.uniPop.show({
    content: 'msg消息提示框(5s后窗口关闭)',
    shade: true,
    shadeClose: false,
    time: 5,
    anim: 'fadeIn',
})

ios底部对话框效果
uniapp自定义弹窗组件|Modal模态框|Loading加载框

let uniPop = this.$refs.uniPop
uniPop.show({
    skin: 'footer',
    content: '<div>查看TA的主页 <br/> 282310962@qq.com</div>',
    shadeClose: false,
    anim: 'bottom',
    
    btns: [
        {
            text: '关注',
            style: 'color: #41a863',
            onTap() {
                console.log('您点击了关注!');
            }
        },
        {text: '加入黑名单'},
        {
            text: '删除',
            // style: {color: '#e63d23'},
            style: 'color: #ff4350',
            onTap() {
                console.log('您点击了删除!');
                
                //删除回调提示
                uniPop.show({
                    anim: 'fadeIn',
                    content: '您点击了删除功能',
                    shade: true,
                    time: 3
                });
            }
        },
        {
            text: '取消',
            style: 'color: #999',
            onTap() {
                console.log('您点击了取消!');
                uniPop.close();
            }
        }
    ]
})

Toast弱提示效果(支持success/info/error/loading四种图标)
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框

this.$refs.uniPop.show({
    skin: 'toast',
    content: 'loading',
    icon: 'loading', //success | info | error | loading
    shade: false,
    time: 3
})

uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框
uniapp自定义弹窗组件|Modal模态框|Loading加载框

uniPop自定义组件模板template

/**
  * @tpl        uni-app自定义弹窗组件 - uniPop.vue
  * @author     andy by 2019-09-20
  * @about      Q:282310962  wx:xy190310
  */
 
<template>
    <view v-if="opts.isVisible" class="uniPop" :class="opts.isCloseCls">
        <view class="unipop__ui_panel">
            <view v-if="opts.shade" class="unipop__ui_mask" @tap="shadeTaped"></view>
            <view class="unipop__ui_main">
                <view class="unipop__ui_child" :style="opts.style">
                    <!-- 标题 -->
                    <view v-if="opts.title" class="unipop__ui_tit">{{opts.title}}</view>
                    <!-- 内容 -->
                    <view v-if="opts.content" class="unipop__ui_cnt" :style="opts.contentStyle">
                        {{opts.content}}
                    </view>
                    <view v-if="opts.btns" class="unipop__ui_btns">
                        <text v-for="(item,index) in opts.btns" :key="index" class="btn" :style="item.style" @tap="btnTaped(item)">{{item.text}}</text>
                    </view>
                </view>
                <!-- xclose -->
                <view v-if="opts.xclose" class="unipop__xclose" @tap="close"></view>
            </view>
        </view>
    </view>
</template>
data() {
    return {
        defaultOptions: {
            isVisible: false,       //是否显示弹窗
            
            title: '',              //标题
            content: '',            //内容
            contentStyle: '',       //内容样式
            style: null,            //自定义弹窗样式
            skin: '',               //弹窗风格
            icon: '',               //弹窗图标
            xclose: false,          //自定义关闭按钮
            
            shade: true,            //遮罩层
            shadeClose: true,       //点击遮罩关闭
            opacity: '',            //遮罩透明度
            time: 0,                //自动关闭秒数
            end: null,              //销毁弹窗回调函数
            
            anim: 'scaleIn',        //弹窗动画  scaleIn(默认) | fadeIn | shake | top | right | bottom | left
            position: '',           //弹窗位置  top | right | bottom | left
            
            btns: null,             //弹窗按钮
        },
        opts: {},
        timer: null
    }
},
show(args) {
    this.opts = Object.assign({}, this.defaultOptions, args, {isVisible: true})
    // console.log(this.opts)
    
    // 自动关闭
    if(this.opts.time) {
        this.timer = setTimeout(() => {
            this.close()
        }, this.opts.time * 1000)
    }
},

以上就是uniApp自定义组件弹窗介绍,希望能喜欢😀😀~~

◆ 附上uniapp自定义顶部导航栏及底部tabBar组件
uniapp自定义导航栏:https://blog.csdn.net/yanxiny...
uniapp自定义tabbar:https://blog.csdn.net/yanxiny...

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
LinMeng LinMeng
4年前
element-ui Dialog组件的close-on-click-modal属性
element组件库的Dialog对话框默认可以通过点击modal关闭Dialog,即点击空白处弹框可关闭。单功能设置如下:<eldialog:closeonclickmodal"false"</eldialog全局修改默认配置,点击空白处不能关闭弹窗://在组件注册.js文件中Dialog.props.cl
CuterCorley CuterCorley
4年前
uni-app开发 经验和技巧总结
前言uniapp是一个基于Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。在开发过程中可能会用到一些经验和技巧,可以加速开发,归纳如下。1.自定义组件模板在开发时,很多情况下需要自定义组件,在自
Stella981 Stella981
3年前
Android 经典笔记七 全局弹窗Dialog
目录介绍1.全局弹窗分析2.全局弹窗必要条件3.全局弹窗实现方式3.1.利用系统弹出dialog3.2.获取WindowManager,直接添加view3.3.在服务里,获取栈顶的Activity,弹窗4.Dialog实现全局Loading加载框4.1.自定义Loading类4.2.给自定义的
Easter79 Easter79
3年前
Taro小程序自定义顶部导航栏
微信自带的顶部导航栏是无法支持自定义icon和增加元素的,在开发小程序的时候自带的根本满足不了需求,分享一个封装好的组件,支持自定义icon、扩展dom,适配安卓、ios、h5,全面屏。我用的是京东的Taro多端编译框架写的小程序,原生的也可以适用,用到的微信/taro的api做调整就行,实现效果如下。!在这里插入图片描述(https://i
Stella981 Stella981
3年前
BootStrap如何支持多模态框弹窗
$(document).on('show.bs.modal','.modal',function(event){$(this).appendTo($('body'));}).on('shown.bs.modal','.modal.in',function(event){
融云IM即时通讯 融云IM即时通讯
7个月前
融云IM干货丨UNI-app适合个人开发者使用吗?
UNIapp非常适合个人开发者使用,原因如下:跨平台高效开发:UNIapp基于Vue.js,支持一次编写代码,多端发布,包括iOS、Android、H5及各大小程序平台,显著降低开发成本。组件丰富:提供大量内置组件和API,加速开发进程,同时支持自定义组件
融云IM即时通讯 融云IM即时通讯
7个月前
融云IM干货丨uni-app的插件生态系统具体有哪些功能?
UNIapp的插件生态系统提供了丰富的功能,具体包括以下几个方面:1.基础功能插件:这些插件提供基本的功能,如网络请求、本地存储、事件处理等,对于大多数UniApp应用都是必需的。2.UI组件插件:提供各种用户界面组件,例如按钮、列表、表单、弹窗等,帮助开
布局王 布局王
1个月前
详解HarmonyOS NEXT仓颉开发语言中的全局弹窗
之前分享过仓颉开发语言中的自定义弹窗,那一次的自定义弹窗需要在对应页面先初始化再进行弹出,不是很方便。今天分享一下不依赖页面的全局弹窗。仓颉提供了全局弹窗模块promptaction,使用之前先将它导入:importohos.promptaction.该模
程序员一鸣 程序员一鸣
1个月前
鸿蒙开发:应用内如何做更新
使用系统的,直接调用检查和显示更新弹窗即可,可以说就两个方法,我们就实现了应用更新的功能,可以说是非常的简单,如果系统的弹窗无法满足您的需求,您可以自定义弹窗,然后实现跳转应用详情页面即可。
丁谧
丁谧
Lv1
江山代有才人出,各领风骚数百年。
文章
3
粉丝
0
获赞
0