微信小程序使用component自定义toast弹窗效果


Posted in Javascript onNovember 27, 2018

前言

微信小程序自带的消息提示框有字数限制,而且图标仅仅只有"success","loading","none"。当我们在实际开发过程中,面对UI给的设计图稿和微信小程序默认提供的消息提示框具有很大差别的时候,自然就不能再使用微信小程序的消息提示框,而应当使用component自定义消息提示框组件。

效果图

微信小程序使用component自定义toast弹窗效果

Step1:初始化组件

新建一个components文件夹,这个文件夹用来存放我们以后要开发的所有自定义组件。

微信小程序使用component自定义toast弹窗效果

然后在components文件夹中创建Toast文件夹,在Toast上右击新建Component 之后就会自动创建相对应的wxml、wxss、js、json文件。

微信小程序使用component自定义toast弹窗效果

Step2:组件的相关配置

将toast.json 中component 设置为true

toast.json:

{
 "component": true,  // 自定义组件声明
 "usingComponents": {}  // 可选项,用于引用别的组件
}

然后在toast.wxml文件里写弹窗组件的模板,在toast.wxss文件里写组件的样式

toast.wxml:

<!--components/Toast/toast.wxml-->
<view class='mask' hidden="{{isShow}}">
 <image class="image" src='../../images/{{icon}}.png' mode='aspectFit'></image>
 <view class='info'>{{information}}</view>
</view>

toast.wxss:

/* components/Toast/toast.wxss */
.mask{
 width: 400rpx;
 height: 300rpx;
 border-radius:10rpx; 
 position: fixed;
 z-index: 1000;
 top: 300rpx;
 left: 175rpx;
 background: rgba(0, 0, 0, 0.6);
}
.image{
 z-index: 1000;
 width: 120rpx;
 height: 120rpx;
 margin-left: 140rpx;
}
.info{
 margin-top:50rpx; 
 z-index: 1000;
 text-align: center;
 color: #ffffff;
}
 width: 400rpx;
 height: 300rpx;
 border-radius:10rpx; 
 position: fixed;
 z-index: 1000;
 top: 300rpx;
 left: 175rpx;
 background: rgba(0, 0, 0, 0.6);
}
.image{
 z-index: 1000;
 width: 120rpx;
 height: 120rpx;
 margin-left:80rpx;
}
.info{
 margin-top:50rpx; 
 z-index: 1000;
 text-align: center;
 color: #ffffff;
}

Step3:定义属性、数据和事件

可以看到在toast.wxml文件中出现了{{isShow}}、{{icon}}、{{information}} 变量,这是为了组件模板能够根据传入的属性动态变化。

toast.js :

// components/Toast/toast.js
Component({
 /**
 * 组件的属性列表
 */
 properties: {    //定义组件属性
 information:{   //用来显示提示信息
  type: String,   // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
  value: '提示信息'  // 属性初始值(可选),如果未指定则会根据类型选择一个
 },
 icon:{     //图标类型,我在images文件夹中存放了success和fail的两个图标
  type:String,
  value:'success'
 },
 showTime:{    //弹窗开始显示的时间单位ms
  type: Number,
  value:1000
 },
 hideTime: {    //弹窗开始隐藏的时间单位ms
  type: Number,
  value: 1000
 }
 },
 /**
 * 组件的初始数据
 */
 data: {
 isShow:true
 },
 /**
 * 组件的方法列表
 */
 methods:{ 
 showToast:function () {
  let that = this;
  setTimeout(function () { 
  that.setData({
   isShow: !that.data.isShow
  });
  }, that.data.showTime);
 },
 hideToast: function (e) {
  let that = this;
  setTimeout(function(){  
  that.setData({
   isShow: !that.data.isShow
  });
  },that.data.hideTime);
 }
 }
})

Step4:使用弹窗/strong>

目前已经完成了toast组件模板,接下来就是在需要显示这个弹窗的页面中使用它。

index.json:引入组件

{
 "usingComponents": {
 "toast": "/components/Toast/toast"
 }
}

index.wxml:

<!--page/index/index.wxml-->
<view class="container">
 <toast id='toast'information="提交成功,我们会尽快和您联系" icon="success" showTime="1000" hideTime='2000'></toast>
 <button type="primary" bindtap="show"> 显示弹窗 </button>
</view>

index.js:

// page/index/index.js
Page({
 /**
 * 页面的初始数据
 */
 data: {

 },
 show:function(){
 this.toast.showToast();
 this.toast.hideToast();
 },
 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {

 },
 /**
 * 生命周期函数--监听页面初次渲染完成
 */
 onReady: function () {
 this.toast = this.selectComponent("#toast");
 },
 /**
 * 生命周期函数--监听页面显示
 */
 onShow: function () {

 },
 /**
 * 生命周期函数--监听页面隐藏
 */
 onHide: function () {

 },
 /**
 * 生命周期函数--监听页面卸载
 */
 onUnload: function () {

 },
 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {

 },
 /**
 * 页面上拉触底事件的处理函数
 */
 onReachBottom: function () {

 },
 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function () {

 }
})

至此我们就完成了自定义toast组件的步骤。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript面向对象扩展库代码分享
Mar 27 Javascript
js+css实现的简单易用兼容好的分页
Dec 30 Javascript
动态加载jquery库的方法
Feb 12 Javascript
Egret引擎开发指南之视觉编程
Sep 03 Javascript
JS简单计算器实例
Jan 20 Javascript
JS中Location使用详解
May 12 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
React中的refs的使用教程
Feb 13 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
JS字符串和数组如何实现相互转化
Jul 02 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
微信小程序自定义底部导航带跳转功能
Nov 27 #Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 #Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 #jQuery
js replace替换字符串同时替换多个方法
Nov 27 #Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 #Javascript
使用electron制作满屏心特效的示例代码
Nov 27 #Javascript
30分钟快速实现小程序语音识别功能
Nov 27 #Javascript
You might like
星际实力自我测试
2020/03/04 星际争霸
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
取选中的radio的值
2010/01/11 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python有几个版本
2020/06/17 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
出纳岗位职责模板
2013/11/27 职场文书
民生工作实施方案
2014/05/31 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
离婚起诉状范本
2015/05/19 职场文书
刑事上诉状范文
2015/05/22 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
python tqdm用法及实例详解
2021/06/16 Python