微信小程序自定义弹窗实现详解(可通用)

微信小程序自定义弹窗实现详解(可通用)

1.需求分析

在小程序中,有时候需要弹出一个自定义样式的弹窗,以提示用户或获得用户的确认。

2.实现过程

2.1 自定义组件

首先,在小程序中我们需要创建一个自定义组件,用于承载弹窗的内容。在组件的 wxml 文件中,可以编写弹窗的样式和内容。

<!-- 弹窗组件 -->
<view class="popup-container" catchtouchmove="{{true}}" wx:if="{{show}}">
  <!-- 背景层 -->
  <view class="popup-mask"></view>

  <!-- 弹窗主体部分 -->
  <view class="popup-content">
    <slot></slot>
  </view>
</view>

<!-- 弹窗样式 -->
<style>
  .popup-container {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 9999;
  }

  .popup-mask {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.6);
  }

  .popup-content {
    position: relative;
    width: 85%;
    background-color: #fff;
    border-radius: 4rpx;
    padding: 20rpx;
    box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.16);
  }
</style>

2.2 在页面中调用组件

在使用自定义弹窗的页面中,需要引入自定义组件,并通过一定的状态控制来控制弹窗的显示和隐藏。

首先,在页面的 json 文件中声明使用的自定义组件:

{
  "usingComponents": {
    "popup": "../../components/popup/popup"
  }
}

然后,在页面的 wxml 文件中使用组件,并绑定显示状态:

<view>
  <button bindtap="showPopup">显示弹窗</button>

  <popup show="{{showPopup}}" bindtapmask="hidePopup">
    <view>这是弹窗的内容</view>
  </popup>
</view>

在页面的 js 文件中,需要声明控制弹窗显示状态的变量及方法:

Page({
  // 控制弹窗显示状态的变量
  data: {
    showPopup: false
  },

  // 显示弹窗
  showPopup: function () {
    this.setData({
      showPopup: true
    });
  },

  // 隐藏弹窗
  hidePopup: function () {
    this.setData({
      showPopup: false
    });
  }
});

2.3 自定义组件的事件绑定

在自定义组件中,我们可以通过定义事件属性,在组件外部向组件内部传递事件。这样就可以在组件中响应事件,并进行相应的操作,比如关闭弹窗。

在弹窗组件的 wxml 中,定义事件属性 bindtapmask:

<view class="popup-mask" bindtap="hide">

在弹窗组件的 js 文件中,声明事件响应方法 hide,并触发自定义事件:

Component({
  properties: {
    // 控制弹窗显示状态的属性
    show: {
      type: Boolean,
      value: false
    }
  },

  methods: {
    // 点击弹窗背景层,触发关闭弹窗事件
    hide: function () {
      this.triggerEvent('tapmask');
    }
  }
});

最后,在页面中使用自定义组件时,绑定自定义事件并定义响应方法:

<view>
  <button bindtap="showPopup">显示弹窗</button>

  <popup show="{{showPopup}}" bindtapmask="hidePopup">
    <view>这是弹窗的内容</view>
  </popup>
</view>

// 隐藏弹窗
hidePopup: function () {
  this.setData({
    showPopup: false
  });
}

这样就可以在点击弹窗背景层时,调用 hidePopup 方法,关闭弹窗了。

3.示例说明

示例一:确认弹窗

在小程序中,我们可以通过自定义弹窗来实现确认弹窗的功能。以下是一个简单的确认弹窗的实现:

<view>
  <button bindtap="showConfirm">弹出确认框</button>

  <popup show="{{showConfirm}}">
    <view>
      <text>确定要删除该记录吗?</text>
      <button bindtap="confirmDelete">确定</button>
      <button bindtap="hideConfirm">取消</button>
    </view>
  </popup>
</view>

Page({
  data: {
    showConfirm: false // 控制弹窗显示状态的变量
  },

  showConfirm: function () {
    this.setData({
      showConfirm: true
    });
  },

  hideConfirm: function () {
    this.setData({
      showConfirm: false
    });
  },

  confirmDelete: function () {
    // 调用删除记录的接口
    // ...

    this.hideConfirm();
  }
});

示例二:输入弹窗

在小程序中,我们可以通过自定义弹窗来实现输入弹窗的功能。以下是一个简单的输入弹窗的实现:

<view>
  <button bindtap="showInput">弹出输入框</button>

  <popup show="{{showInput}}">
    <view>
      <input placeholder="请输入" value="{{inputValue}}" bindinput="inputChange"/>
      <button bindtap="confirmInput">确定</button>
      <button bindtap="hideInput">取消</button>
    </view>
  </popup>
</view>

Page({
  data: {
    showInput: false, // 控制弹窗显示状态的变量
    inputValue: '' // 输入框的值
  },

  showInput: function () {
    this.setData({
      showInput: true
    });
  },

  hideInput: function () {
    this.setData({
      showInput: false
    });
  },

  inputChange: function (e) {
    this.setData({
      inputValue: e.detail.value
    });
  },

  confirmInput: function () {
    // 获取输入框的值
    var inputValue = this.data.inputValue;

    // 调用接口
    // ...

    this.hideInput();
  }
});

4.总结

通过自定义组件和一定的状态控制,小程序中的自定义弹窗实现起来并不困难。而且,自定义组件可以在多个页面中复用,大大提高了代码的复用率,也方便了日后的维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序自定义弹窗实现详解(可通用) - Python技术站

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

相关文章

  • 内存基本知识

    内存基本知识攻略 什么是内存? 内存是计算机中用于存储数据和指令的硬件设备。它是计算机的重要组成部分,用于临时存储正在执行的程序和数据。内存通常由一系列存储单元组成,每个存储单元都有一个唯一的地址。 内存的工作原理 内存的工作原理可以简单地描述为读取和写入数据。当计算机需要读取数据时,它会根据指定的地址访问内存,并将数据传输到处理器中。当计算机需要写入数据时…

    other 2023年8月1日
    00
  • java链表应用–基于链表实现队列详解(尾指针操作)

    标题设置 首先我们需要设置好标题,格式如下: Java链表应用–基于链表实现队列详解(尾指针操作) 队列简介 接下来我们先介绍一下队列的概念和特点: 队列是一种先进先出(FIFO)的数据结构,可以看成是一种特殊的线性表。队列只允许在队尾插入元素,在队头删除元素,故又称为先进先出表。在队列中插入元素的操作称为入队,删除元素的操作称为出队。 链表实现队列的基本…

    other 2023年6月27日
    00
  • PHPCMS V9 全站 Sitemaps生成实现代码[服务器端版]

    首先,需要解释一下Sitemaps是什么。 Sitemaps通常是XML文件,用于向搜索引擎提供有关网站上页面的信息,以使其更好地进行索引。PHPCMS V9是一个基于PHP语言的CMS系统,下面是PHPCMS V9全站Sitemaps生成实现代码[服务器端版]的详细攻略。 准备工作 安装PHPCMS V9 CMS系统。 安装好网站根目录下的sitemap.…

    other 2023年6月27日
    00
  • Android实现拼多多地址选择器

    Android实现拼多多地址选择器攻略 拼多多地址选择器是一个常见的功能,可以让用户方便地选择地址信息。在Android中,我们可以使用以下步骤来实现这个功能。 步骤一:添加依赖库 首先,我们需要在项目的build.gradle文件中添加以下依赖库: implementation ‘com.github.jprovince:addresspicker:1.0…

    other 2023年9月6日
    00
  • 通过VB6将ASP编译封装成DLL组件最简教程 附全部工程源文件

    首先,要理解本教程的目的,即将ASP网站中的某些代码封装成DLL组件,然后在VB6程序中调用它们。这样做的好处包括提高代码的可重用性和安全性。 以下是该过程的详细攻略: 1. 准备工作 在开始之前,你需要在计算机上安装VB6和IIS服务器。另外,你需要确认你的ASP网站已经可以正常运行,因为我们将从中提取代码。 2. 编写ASP代码 我们将使用一些简单的AS…

    other 2023年6月25日
    00
  • Win10系统64位可用内存突然少很多可用空间该怎么办?

    Win10系统64位可用内存突然减少的解决攻略 如果你的Win10系统64位可用内存突然减少了很多,可能会导致系统运行缓慢或出现其他问题。以下是一些解决此问题的步骤和示例说明。 步骤1:检查系统资源使用情况 首先,你需要检查系统资源使用情况,以确定哪些进程或应用程序占用了大量的内存。你可以按照以下步骤进行操作: 打开任务管理器:按下Ctrl + Shift …

    other 2023年7月31日
    00
  • 教育行业网络安全、控制学生上网软件、学校上网管理解决方案校园网概况

    教育行业网络安全、控制学生上网软件、学校上网管理解决方案校园网概况 教育行业网络安全 教育行业作为一个重要的社会领域,在网络安全方面有很高的要求。一方面,教育行业需要保护学生隐私和学校信息安全,避免各种黑客攻击和数据泄漏。另一方面,教育领域需要保证学生合理上网,防止上网成瘾、网络游戏影响学习等问题。 因此,教育行业的网络安全应该采取以下措施: 建立完善的网络…

    other 2023年6月26日
    00
  • 利用uni-app开发App的超简易教程

    下面我将详细讲解如何利用uni-app开发App的超简易教程。 1. 准备工作 首先,我们需要准备好开发环境。具体步骤如下: 安装 Node.js:前往官网 https://nodejs.org/en/ 下载并安装 Node.js。 安装 HBuilderX:前往官网 https://www.dcloud.io/hbuilderx.html 下载并安装 HB…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部