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

yizhihongxing

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

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日

相关文章

  • 网速很快打开网页很慢的八大原因

    以下是关于“网速很快打开网页很慢的八大原因”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 当我们的网速很快,打开网页却很慢时可能是由于以下八大原因导致的: DNS解析 网络拥堵 响应慢 网站代码问题 浏览器缓存问题 电脑性能问题 网络安全软件 网络连接问题 解决方法 以下是解决网速很快打网页很慢的八大原因的方法: DNS解析慢 更换DN…

    other 2023年5月7日
    00
  • iPhone手机safari浏览器不能保存账号密码该怎么办?

    如果您在iPhone手机上使用Safari浏览器,并发现无法保存您的账号和密码,您可以参考以下攻略解决该问题。 1. 检查Safari浏览器的设置 一些浏览器的设置可能会影响您的账号密码保存能力。下面是一些有利于将账号密码保存到Safari浏览器的设置技巧: 打开Safari浏览器,进入“设置” > “Safari” > “自动填充”。 确保“使…

    other 2023年6月27日
    00
  • git切换远程分支

    下面是关于如何切换远程分支的详细攻略。 1. 查看远程分支 在切换远程分支之前,需要先查看已有的远程分支。可以使用以下命令查看: git branch -r 其中,”r”代表”remote”,表示查看远程分支。执行该命令后,会列出当前仓库连接的所有远程分支。 2. 切换远程分支 在上一步中查看到远程分支之后,就可以使用以下命令来切换到需要操作的远程分支: g…

    其他 2023年4月16日
    00
  • Win10开机蓝屏代码DPC_WATCHDOG_VIOLATION怎么解决?

    Win10开机蓝屏代码DPC_WATCHDOG_VIOLATION怎么解决? 什么是DPC_WATCHDOG_VIOLATION? DPC_WATCHDOG_VIOLATION是Windows系统中一个很常见的蓝屏错误代码。它通常是由于硬件或软件驱动程序异常造成的。DPC(Deferred Procedure Call)是指操作系统中的一种程序调度机制,它会…

    other 2023年6月27日
    00
  • Android studio代码中的大小写字母怎么切换?

    在Android Studio中,你可以使用以下方法切换代码中的大小写字母: 使用快捷键: 将光标放在你想要切换大小写的单词上。 使用快捷键 Ctrl + Shift + U(Windows/Linux)或 Cmd + Shift + U(Mac)来切换选定单词的大小写。 使用菜单选项: 将光标放在你想要切换大小写的单词上。 在菜单栏中选择 Edit(编辑)…

    other 2023年8月16日
    00
  • DEDECMS 5.7 将data目录迁移后,网站地图无法打开和更新的解决方法

    下面是详细的攻略过程: 背景描述 DEDECMS 5.7 是一个流行的 CMS 系统,但是某些情况下需要对 data 目录进行迁移。然而,在将 data 目录迁移之后,一些用户会发现网站地图无法更新和打开,这时候需要特殊的解决方法。 解决方法 步骤一:修改缓存文件夹路径 1.打开网站根目录下的 data/config.cache.inc.php 文件。 2.…

    other 2023年6月27日
    00
  • java构造器的重载实现实例讲解

    Java构造器的重载实现实例讲解 构造器(Constructor)是一种特殊的方法,用于创建对象并初始化对象的成员变量。在Java中,构造器的重载是指在同一个类中定义多个构造器,它们具有相同的名称但参数列表不同。通过构造器的重载,我们可以根据不同的需求来创建对象。 构造器的重载实现步骤 要实现构造器的重载,我们需要按照以下步骤进行操作: 在类中定义多个构造器…

    other 2023年8月6日
    00
  • Android实现可折叠式标题栏

    Android实现可折叠式标题栏攻略 1. 添加依赖库 首先,我们需要在项目的build.gradle文件中添加以下依赖库: implementation ‘com.google.android.material:material:1.4.0’ 这将使我们能够使用Material Design组件库中的相关功能。 2. 创建布局文件 接下来,我们需要创建一个…

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