使用小程序写一个弹窗输入组件

介绍

在小程序开发中,弹窗组件是非常常见的一个组件。在许多场景中,我们需要弹出一个提示框,让用户进行一些操作。这个弹框组件一般包含一个标题和一些输入框,让用户输入一些内容或做出选择。

需求分析

对于这个组件的需求,我们可以定义如下的API:

1. 弹窗组件的调用方法

我们可以为弹窗组件定义一个show方法,以供调用。在show方法中,我们可以传入一些参数,包括组件的标题、输入框的内容和一些按钮的文字等。

2. 弹窗组件的关闭方法

当用户点击弹窗中的关闭按钮时,我们需要定义一个close方法,以供关闭弹窗。

3. 输入框组件

弹窗组件中一般包含一些输入框,我们需要定义一个输入框组件,用于接受用户的输入。这个组件可以有多个,每个输入框可以有不同的提示文字。

技术实现

在实现这个组件时,我们使用小程序提供的组件来完成。主要使用的组件有:

button:用于生成按钮

view:视图容器,可以嵌套其他组件

text:用于生成文本

input:用于生成输入框

mask:用于生成遮罩层

1. 定义wxml文件

首先,我们需要定义一个wxml文件,用于生成弹窗组件的结构。其代码如下:

"use strict";

{{title}}

×

在这个wxml文件中,我们定义了一个modal容器,用于放置弹框的内容。在这个容器中包含弹框的标题、输入框、按钮以及遮罩层等。

2. 定义wxss文件

接下来,我们需要定义一个wxss文件,用于实现弹窗组件的样式。其代码如下:

/* 弹框容器 */

.modal {

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

z-index: 9999;

display: none;

}

/* 弹框主体内容 */

.modal-body {

position: absolute;

left: 0;

top: 0;

width: 100%;

background-color: #fff;

border-radius: 10px;

box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);

opacity: 0;

transform: translateY(-10px);

transition-duration: 0.3s;

transition-timing-function: cubic-bezier(0.68, -0.6, 0.32, 1.6);

z-index: 99999;

}

/* 显示弹框 */

.modal-body-show {

opacity: 1;

transform: translateY(0);

}

/* 弹框标题 */

.modal-title {

font-size: 16px;

color: #333;

text-align: center;

padding: 16px;

border-bottom: 1px solid #eee;

}

/* 弹框关闭按钮 */

.modal-close {

position: absolute;

top: 8px;

right: 8px;

font-size: 24px;

color: #ccc;

}

/* 弹框输入框 */

.modal-input {

padding: 16px;

border-bottom: 1px solid #eee;

}

.modal-input-inner {

width: 100%;

height: 32px;

border: none;

outline: none;

}

/* 弹框操作按钮 */

.modal-footer {

display: flex;

justify-content: center;

padding: 16px;

}

.modal-button-primary {

width: 60px;

height: 32px;

line-height: 32px;

margin-right: 10px;

border-radius: 4px;

background-color: #007aff;

color: #fff;

}

.modal-button-default {

width: 60px;

height: 32px;

line-height: 32px;

margin-left: 10px;

border-radius: 4px;

background-color: #eee;

color: #333;

}

/* 遮罩层 */

.modal-mask {

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

background-color: rgba(0, 0, 0, 0.4);

opacity: 0;

transform: translateY(-10px);

transition-duration: 0.3s;

transition-timing-function: cubic-bezier(0.68, -0.6, 0.32, 1.6);

z-index: 9999;

}

.modal-mask-show {

opacity: 1;

transform: translateY(0);

}

在这个wxss文件中,我们定义了弹窗容器、弹窗内容和遮罩层的样式。其中,我们为弹窗容器设置了绝对定位,使其覆盖在整个页面上,同时为其设置了display:none,使其初始状态为隐藏。在弹窗容器和遮罩层中,我们使用了opacity和transform属性,实现了弹窗的动画效果。

3. 定义js文件

最后,我们需要定义一个js文件,用于处理弹窗组件的逻辑。其代码如下:

Component({

properties: {

title: { // 弹框标题

type: String,

value: '提示'

},

inputValue: { // 弹框输入框的默认值

type: String,

value: ''

},

inputPlaceholder: { // 弹框输入框的默认提示

type: String,

value: ''

},

confirmButtonText: { // 确认按钮文字

type: String,

value: '确认'

},

cancelButtonText: { // 取消按钮文字

type: String,

value: '取消'

}

},

data: {

isShowModal: false, // 是否显示弹框

},

methods: {

// 显示弹框

show() {

this.setData({

isShowModal: true

});

},

// 隐藏弹框

hide() {

this.setData({

isShowModal: false

});

},

// 关闭弹框

closeModal() {

this.hide();

},

// 输入框输入事件

onInput(e) {

this.setData({

inputValue: e.detail.value

});

},

// 确认按钮点击事件

confirm() {

this.triggerEvent('confirm', {

inputValue: this.data.inputValue

});

this.hide();

},

// 取消按钮点击事件

cancel() {

this.triggerEvent('cancel');

this.hide();

},

// 阻止弹框滚动穿透

preventD() { }

}

})

在这个js文件中,我们定义了一个Component组件,用于实现弹窗组件的逻辑。在这个组件中,我们定义了一些属性,包括标题、输入框的默认值和提示文字以及按钮的文字等。同时我们也定义了一些方法,包括显示弹框、隐藏弹框、关闭弹框、输入框的输入事件以及按钮的点击事件等。

使用方法

在使用这个弹窗组件时,我们只需要在需要使用的页面中引入这个组件,然后在对应的位置调用show方法即可。调用show方法时,我们也可以设置一些参数,包括弹框的标题、输入框的提示文字和默认值以及按钮的文字等。其代码如下:

Page({

data: {

inputValue: ''

},

showModal() {

this.selectComponent('#modal').show();

},

onModalConfirm(e) {

console.log('输入的值是:', e.detail.inputValue);

this.setData({

inputValue: e.detail.inputValue

})

},

onModalCancel() {

console.log('已取消');

}

})

在这个页面中,我们定义了一个showModal方法,在这个方法中调用了我们刚才写的show方法。同时,我们还定义了一个onModalConfirm方法和一个onModalCancel方法,用于处理弹框组件的确认和取消事件。

总结

通过本文中的介绍和实现,我们可以发现,使用小程序开发弹出框组件非常简单。通过定义wxml、wxss和js文件,我们可以创建出一个功能强大、易于使用的弹窗组件,可以轻松应用到各种场景中,给用户提供更便捷的操作体验。