微信小程序实现自定义modal弹窗封装的方法

yizhihongxing

为了实现微信小程序中自定义的弹窗效果,可以使用组件化的方法进行封装。

第一步:创建组件文件

在小程序项目中创建一个组件文件夹,例如 components,并在其中创建一个名为 modal 的文件夹。在 modal 文件夹中创建以下文件:

  • modal.wxml:用于定义弹窗的结构,例如标题、内容、按钮等。
  • modal.wxss:用于定义弹窗的样式,例如背景色、字体大小、边框等。
  • modal.js:用于控制弹窗的行为,例如显示、隐藏、按钮点击等。
  • index.js:用于将组件注册到全局。

第二步:编写弹窗结构

modal.wxml 中定义弹窗的结构,例如:

<view class="modal-mask">
  <view class="modal-wrapper">
    <view class="modal-header">
      <text>{{title}}</text>
    </view>
    <view class="modal-body">
      <slot></slot>
    </view>
    <view class="modal-footer">
      <button class="modal-btn-confirm" bindtap="confirm">
        {{confirmText}}
      </button>
      <button class="modal-btn-cancel" bindtap="cancel">
        {{cancelText}}
      </button>
    </view>
  </view>
</view>

在弹窗中使用了一个插槽(slot),可以用于显示弹窗的内容。

第三步:编写弹窗样式

modal.wxss 中定义弹窗的样式,例如:

.modal-mask {
  position: fixed;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  z-index: 9999;
}

.modal-wrapper {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  max-width: 400rpx;
  background: #fff;
  border-radius: 8rpx;
  overflow: hidden;
}

.modal-header {
  padding: 20rpx;
  text-align: center;
  font-size: 28rpx;
  font-weight: bold;
}

.modal-body {
  padding: 20rpx;
  font-size: 32rpx;
}

.modal-footer {
  display: flex;
  justify-content: center;
}

.modal-btn-confirm {
  margin-right: 20rpx;
  padding: 10rpx 30rpx;
  background: #1aad19;
  color: #fff;
  font-size: 28rpx;
  border-radius: 8rpx;
}

.modal-btn-cancel {
  padding: 10rpx 30rpx;
  background: #eee;
  color: #333;
  font-size: 28rpx;
  border-radius: 8rpx;
}

根据需要可以调整弹窗的样式。

第四步:编写弹窗逻辑

modal.js 中定义弹窗的逻辑,例如:

Component({
  properties: {
    title: {
      type: String,
      value: '提示'
    },
    confirmText: {
      type: String,
      value: '确定'
    },
    cancelText: {
      type: String,
      value: '取消'
    },
    visible: {
      type: Boolean,
      value: false,
      observer: function(newVal) {
        if (newVal) {
          this.setData({
            animation: 'modal-show'
          })
        } else {
          this.setData({
            animation: 'modal-hide'
          })
        }
      }
    }
  },
  methods: {
    confirm: function() {
      this.setData({
        visible: false
      })
      this.triggerEvent('confirm')
    },
    cancel: function() {
      this.setData({
        visible: false
      })
      this.triggerEvent('cancel')
    }
  }
})

在组件的 properties 中定义了弹窗的配置项,包括标题、确认按钮文本、取消按钮文本、是否可见等。在 observer 函数中监听 visible 属性的变化,根据变化控制弹窗的显示和隐藏。

在 methods 中定义了确认和取消按钮的点击事件,触发了对应的自定义事件(confirm 和 cancel)。

第五步:注册组件

index.js 中注册组件,例如:

import Modal from './modal'

Component({
  options: {
    multipleSlots: true
  },
  properties: {
    title: {
      type: String,
      value: '提示'
    },
    confirmText: {
      type: String,
      value: '确定'
    },
    cancelText: {
      type: String,
      value: '取消'
    }
  },
  methods: {
    showModal: function() {
      this.setData({
        visible: true
      })
    }
  },
  // 将组件注册到全局
  attached: function() {
    wx._modal = this.selectComponent('.modal')
  }
})

wx.Modal = Modal

在组件的 attached 函数中将组件注册到全局,这样就方便在其他页面中使用自定义的弹窗组件。同时在 methods 中定义 showModal 函数,用于显示弹窗。

示例

以下是使用自定义弹窗组件的示例:

wx.Modal({
  title: '提示',
  content: '这是一个弹窗',
  success: function(res) {
    if (res.confirm) {
      console.log('用户点击确定')
    } else if (res.cancel) {
      console.log('用户点击取消')
    }
  }
})

上述示例中,调用 wx.Modal 函数显示弹窗,设置了弹窗的标题和内容,并在确认和取消按钮点击后分别触发了回调函数。

另一个示例是:

<modal visible="{{visible}}" title="提示" confirm-text="确定" cancel-text="取消" bindconfirm="onConfirm" bindcancel="onCancel">
  是否删除这个记录?
</modal>

在页面中引入自定义的弹窗组件,在 modal 标签中设置弹窗的配置项,包括标题、按钮文本、内容以及确认和取消按钮点击后触发的事件。设置了 visible 属性控制弹窗的显示和隐藏。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序实现自定义modal弹窗封装的方法 - Python技术站

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

相关文章

  • 详解MySQL双活同步复制四种解决方案

    详解MySQL双活同步复制四种解决方案 背景 随着业务的发展和用户量的增加,MySQL数据库的高可用性和性能的要求也越来越高。其中MySQL双活同步复制作为一种常见的数据库高可用解决方案,因其可以提供双向同步复制的功能被广泛应用。但是,MySQL双活同步复制的实现过程复杂,需要考虑到许多方面的问题。本文主要介绍MySQL双活同步复制的四种解决方案,并结合实例…

    other 2023年6月26日
    00
  • LocalStorage封装一次解决方法示例

    接下来我会分步骤详细讲解LocalStorage封装一次解决方法示例的完整攻略: 思路 定义一个封装对象,该对象可以支持get、set、remove方法。 使用JSON.stringify将对象转换为字符串,使用JSON.parse将字符串还原为对象。这样可以将JavaScript对象存储到localStorage中。 添加了一个过期时间的功能。如果过期时间…

    other 2023年6月25日
    00
  • 文件下载到99%时就不动了的问题解决方案[图解]

    以下是针对文件下载到99%时就不动了的问题解决方案的完整攻略。 问题描述 在网站上下载文件时,文件下载到99%以上,但就是不动了,无论等待多长时间也没有任何进展。这是一个很常见的问题,很多用户遇到过类似的情况。 解决方案 方案一:清空浏览器缓存和Cookie 有时候下载出现问题是因为浏览器缓存或Cookie出现了问题,导致文件下载中断。这个时候,清空浏览器缓…

    other 2023年6月26日
    00
  • vuecli3打包后出现跨域问题,前端配置拦截器无效的解决

    如果在使用VueCLI3打包项目之后出现跨域问题,可以采用以下方法: 修改vue.config.js文件 在VueCLI3项目根目录下新建/vue.config.js文件,并加入如下代码: module.exports = { devServer: { proxy: { ‘/api’: { target: ‘http://localhost:3000’, c…

    other 2023年6月27日
    00
  • 【转载】2012年七个免费asp空间分享-支持asp、asp.net的空间

    【转载】2012年七个免费asp空间分享-支持asp、asp.net的空间 最近,我们网站收到不少用户咨询关于免费asp空间的问题,因此在这里给大家分享一些比较不错的免费asp空间。这些空间均支持asp、asp.net语言,供大家参考。 1. 000webhost 000webhost是一家提供免费网站空间的网站。该网站提供了“完全免费”的空间,无需付费,也…

    其他 2023年3月28日
    00
  • golang使用ssh远程连接服务器并执行命令

    golang使用ssh远程连接服务器并执行命令 在开发过程中,我们经常需要使用ssh协议连接到远程服务器并执行命令。golang中提供了一个ssh包,可以方便地实现ssh连接服务器。本文将解释如何使用golang实现ssh连接服务器并执行命令。 1. 安装ssh包 ssh包是官方标准库中的一部分,您可以直接使用它,而无需安装其他软件包。要使用ssh包,请在代…

    其他 2023年3月28日
    00
  • EasyC++全局变量

    EasyC++全局变量攻略 在EasyC++中,全局变量是在程序的任何地方都可以访问的变量。它们在整个程序中都是可见的,因此可以在不同的函数中共享数据。下面是关于EasyC++全局变量的详细攻略。 声明全局变量 要声明一个全局变量,只需在所有函数之外的任何地方进行声明。通常,全局变量的声明放在文件的顶部,以便于其他函数访问。 // 全局变量声明 int gl…

    other 2023年7月28日
    00
  • 浅析Android Studio 3.0 升级各种坑(推荐)

    浅析Android Studio 3.0 升级各种坑(推荐) 为什么要升级Android Studio? 随着Android操作系统的不断升级和新功能的加入,开发者需要使用新的API才能保持应用程序的更新和市场竞争力。而新的API通常需要使用最新版本的Android Studio才能支持。此外,Android Studio 3.0带来了许多新的特性,如Kot…

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