自己写一个uniapp全局弹窗(APP端)

下面是详细讲解如何自己写一个uniapp全局弹窗(APP端)的完整攻略。

1. 准备工作

在开始之前,需要先确定以下几点:

  1. 确定弹窗的样式和内容,包括弹窗的尺寸、背景色、字体等;
  2. 确定弹窗的触发方式,比如是否需要点击按钮或者触发特定事件;
  3. 确定弹窗的位置,比如是否需要固定在屏幕底部或者居中展现。

2. 实现步骤

实现全局弹窗的基本步骤如下:

  1. 在 App.vue 文件中定义弹窗组件,可以使用 uni-popup 组件或自定义组件;
  2. 在需要展示弹窗的页面中引入并使用该组件;
  3. 在 App.vue 文件中触发弹窗的显示或隐藏,一般使用监听事件的方式实现。

下面将分别介绍这三个步骤的具体实现方式。

2.1 定义弹窗组件

在 App.vue 文件中定义一个固定的容器,用于存放弹窗组件。可以使用 uni-popup 组件来作为弹窗的容器,也可以自定义一个容器。以下是使用 uni-popup 组件的定义方式:

<template>
  <view>
    <!-- 页面主体内容 -->

    <uni-popup v-model="showPopup">
      <!-- 弹窗内容 -->
    </uni-popup>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        showPopup: false // 弹窗是否显示的状态值
      }
    }
  }
</script>

以上代码中,<uni-popup> 组件作为弹窗的容器,使用了双向绑定的方式控制弹窗是否显示。<template> 标签中的内容是弹窗的主体内容。

2.2 引入并使用组件

在需要展示弹窗的页面中引入并使用定义好的组件。以下是示例代码:

<template>
  <view>
    <!-- 页面主体内容 -->

    <button @click="showPopup">展示弹窗</button>
  </view>
</template>
<script>
  export default {
    methods: {
      showPopup() {
        // 通过 $parent 访问 App.vue 中的 showPopup 数据,控制弹窗是否显示
        this.$parent.showPopup = true
      }
    }
  }
</script>

以上代码中,通过点击按钮触发 showPopup 方法,通过访问 App.vue 组件中的 showPopup 数据控制弹窗是否显示。

2.3 控制弹窗的显示和隐藏

在 App.vue 中监听页面发生的特定事件,控制弹窗的显示和隐藏。以下是示例代码:

<template>
  <view>
    <!-- 页面主体内容 -->

    <uni-popup v-model="showPopup">
      <!-- 弹窗内容 -->
    </uni-popup>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        showPopup: false // 弹窗是否显示的状态值
      }
    },
    created() {
      // 监听页面是否发生了 “分享” 事件,若发生则显示弹窗
      uni.$on('share', () => {
        this.showPopup = true
      })
    }
  }
</script>

以上代码中,通过 created 生命周期函数监听页面特定事件。当页面发生 share 事件时,改变 showPopup 状态值,控制弹窗的显示和隐藏。

3. 示例说明

下面将给出两个具体的示例,帮助理解全局弹窗的实现。

3.1 示例1:底部分享弹窗

该示例实现了一个底部分享弹窗,当用户点击页面中的分享按钮时,弹出分享弹窗。

  1. 定义组件:
<template>
  <view>
    <uni-popup v-model="showPopup" position="bottom" :duration="300" class="share-popup">
      <view class="share-item" v-for="(item, index) in shareList" :key="index" @click="handleShare(item)">
        <image :src="item.icon"></image>
        <text>{{ item.label }}</text>
      </view>
    </uni-popup>
  </view>
</template>
<script>
  export default {
    props: {
      visible: Boolean
    },
    computed: {
      showPopup() {
        return this.visible
      }
    },
    data() {
      return {
        shareList: [
          { label: '微信好友', icon: '/static/share/wechat.png' },
          { label: '朋友圈', icon: '/static/share/friend-circle.png' },
          { label: 'QQ', icon: '/static/share/qq.png' },
          { label: '微博', icon: '/static/share/weibo.png' },
          { label: '复制链接', icon: '/static/share/link.png' }
        ]
      }
    },
    methods: {
      handleShare(item) {
        // 处理分享逻辑
      }
    }
  }
</script>
<style>
  .share-popup {
    background-color: #ffffff;
  }
  .share-item {
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .share-item image {
    width: 25px;
    height: 25px;
  }
  .share-item text {
    font-size: 12px;
    margin-top: 5px;
  }
</style>

以上代码中,使用 uni-popup 组件作为弹窗容器,使用 v-model 控制弹窗显示和隐藏。弹窗使用底部弹出的方式展现。弹窗主体内容为若干个分享图标及其名称。点击分享图标时,触发 handleShare 方法,处理分享逻辑。

  1. 在需要展示弹窗的页面中使用组件:
<template>
  <view>
    <!-- 页面主体内容 -->

    <button @click="showSharePopup">分享</button>
    <share-popup :visible="showShare"></share-popup>
  </view>
</template>
<script>
  import SharePopup from '@/components/SharePopup'

  export default {
    data() {
      return {
        showShare: false // 控制分享弹窗是否显示的状态值
      }
    },
    components: {
      SharePopup
    },
    methods: {
      showSharePopup() {
        // 点击分享按钮,显示分享弹窗
        this.showShare = true
      }
    }
  }
</script>

以上代码中,点击页面上的分享按钮时,通过双向绑定的方式控制 showShare 状态值,控制分享弹窗的显示和隐藏。同时,引入了定义好的 SharePopup 组件。

3.2 示例2:登录超时弹窗

该示例实现了一个登录超时弹窗,当用户长时间未操作时,弹出登录超时弹窗。用户点击“重新登录”按钮,可以重新登录。

  1. 定义组件:
<template>
  <view>
    <uni-popup v-model="showPopup" position="middle" :overlay-toggle="false" class="timeout-popup">
      <view class="timeout-message">由于您长时间未操作,已经退出登录,请重新登录</view>
      <button class="relogin-btn" @click="handleLogin">重新登录</button>
    </uni-popup>
  </view>
</template>
<script>
  export default {
    props: {
      visible: Boolean
    },
    computed: {
      showPopup() {
        return this.visible
      }
    },
    methods: {
      handleLogin() {
        // 处理登录逻辑
      }
    }
  }
</script>
<style>
  .timeout-popup {
    background-color: #ffffff;
  }
  .timeout-message {
    font-size: 16px;
    padding: 20px;
    text-align: center;
  }
  .relogin-btn {
    display: block;
    margin: 10px auto;
    width: 120px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    color: #ffffff;
    background-color: #45bcb8;
    border-radius: 20px;
  }
</style>

以上代码中,使用 uni-popup 组件作为弹窗容器,使用 v-model 控制弹窗显示和隐藏。弹窗使用居中展现的方式。弹窗主体内容为提示信息及“重新登录”按钮。点击“重新登录”按钮,触发 handleLogin 方法,处理登录逻辑。

  1. 在 App.vue 中使用组件并控制弹窗的显示和隐藏:
<template>
  <view>
    <!-- 页面主体内容 -->

    <timeout-popup :visible="showTimeout"></timeout-popup>
  </view>
</template>
<script>
  import TimeoutPopup from '@/components/TimeoutPopup'

  export default {
    data() {
      return {
        showTimeout: false, // 控制登录超时弹窗是否显示的状态值
        lastOperation: 0 // 记录用户最后一次操作时间,初始值为0
      }
    },
    created() {
      // 每隔30秒检查一次用户是否长时间未操作
      setInterval(() => {
        const now = new Date().getTime()
        if (now - this.lastOperation > 30 * 1000) {
          this.showTimeout = true
        }
      }, 30 * 1000)

      // 监听用户操作时间
      uni.$on('operation', () => {
        this.lastOperation = new Date().getTime()
      })
    },
    components: {
      TimeoutPopup
    }
  }
</script>

以上代码中,使用定时器每隔30秒检查一次用户最后一次操作时间,如果时间超过30秒,则显示登录超时弹窗。同时,使用 uni.$on 监听页面的操作事件,记录用户最后一次操作时间。引入了定义好的 TimeoutPopup 组件。

至此,自己写一个uniapp全局弹窗(APP端)的攻略就讲解完毕了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:自己写一个uniapp全局弹窗(APP端) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JSONP跨域的原理解析及其实现介绍

    下面我将详细讲解“JSONP跨域的原理解析及其实现介绍”的完整攻略。 什么是JSONP跨域 首先,需要了解JSONP(JSON with Padding)是什么。在网络应用中,由于安全策略的限制,浏览器不能直接跨域获取数据。JSONP利用“script”标签不受跨域限制的特性,通过动态创建“script”标签,并在服务器返回的数据中添加一个回调函数,从而实现…

    JavaScript 2023年5月27日
    00
  • 输入一个网址的时候,后台到底发生了一件件什么样的事

    当用户在浏览器中输入一个网址时,后台会经历如下过程: DNS解析 首先,浏览器需要将用户输入的网址转化为一个IP地址,这个过程称为DNS解析。浏览器将会向本地DNS服务器发出请求,本地DNS服务器可能会向上级DNS服务器继续发出请求,直到最终找到负责该域名的DNS服务器,并从中获取对应IP地址。如果本地DNS服务器中不存在对应域名的IP地址,将会继续向上级D…

    JavaScript 2023年6月10日
    00
  • javascript表单验证以及正则表达式举例详解

    JavaScript表单验证以及正则表达式详解 在前端开发中,表单验证是必不可少的环节之一。JavaScript提供了强大的正则表达式功能,可以用来验证输入内容的格式是否符合所需规则。本文将详细讲解JavaScript表单验证以及正则表达式的使用方法。 表单验证 在表单提交数据前,我们需要对用户输入的数据进行验证,确保数据的格式符合要求。例如,一个注册表单需…

    JavaScript 2023年6月10日
    00
  • 深入解析Java设计模式编程中观察者模式的运用

    深入解析Java设计模式编程中观察者模式的运用 观察者模式是一种经典的设计模式,它能够实现对象之间的一对多依赖关系。当一个对象状态发生改变时,其所有关联对象都能够收到通知并自动更新。 观察者模式的定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,所有的观察者对象都能够收到通知并自动更新。 观察者模…

    JavaScript 2023年5月28日
    00
  • JS常用正则表达式总结【经典】

    下面是对“JS常用正则表达式总结【经典】”这个话题的完整解释: 什么是正则表达式 正则表达式(Regular Expression)又称正规表示式,是对字符串操作的一种逻辑公式,就是字符串匹配的工具,是一种文本模式,包括普通字符和元字符(特殊的字符)构成。正则表达式可以用来检索、替换和匹配字符串中的字符。 常用的正则表达式 下面介绍一下常用的正则表达式及其含…

    JavaScript 2023年5月19日
    00
  • JavaScript 拖拽实现(附注释),最经典简单短小精悍!

    以下是JavaScript拖拽实现的详细攻略: 概述 拖拽实现是网页中常见的交互效果,它的实现原理是借助JavaScript事件和DOM操作。本文将带您全面了解JavaScript拖拽的实现方法。 基本原理 拖拽实现的基本原理如下: 给需要拖拽的元素绑定mousedown事件。 鼠标按下时,记录鼠标相对元素位置,并给document绑定mousemove和m…

    JavaScript 2023年6月11日
    00
  • JS之Date对象和获取系统当前时间详解

    当我们开发网站时,经常需要操作时间。JavaScript中提供了Date对象,可以方便地进行时间相关的操作。 Date对象 Date对象可以获取当前时间,也可以设置指定时间,提供了很多方法操作时间。 获取当前时间 获取当前时间可以使用Date对象的构造函数不传递任何参数,也可以使用now方法。 // 使用构造函数获取当前时间 let now1 = new D…

    JavaScript 2023年5月27日
    00
  • javascript引用对象的方法

    下面就是关于Javascript引用对象的方法的详细讲解。 什么是引用对象 Javascript中引用对象是一种特殊的对象,它不像普通对象一样存储值,而是存储对一个值的引用。当我们使用引用对象时,它们通常是用来访问、修改或删除关联值的。 引用对象的方法 引用对象有很多方法,下面我们来逐一讲解这些方法。 1. call() 和 apply() call()和a…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部