微信小程序自定义toast组件的方法详解【含动画】


Posted in Javascript onMay 11, 2019

本文实例讲述了微信小程序自定义toast组件的方法。分享给大家供大家参考,具体如下:

怎么创建就不说了,前面一篇有
微信小程序自定义prompt组件
直接上代码

wxml

<!-- components/toast/toast.wxml -->
<view class="toast-box {{isShow? 'show':''}}" animation="{{animationData}}">
  <view class="toast-content" >
    <view class="toast-img">
      <block wx:if="{{type==='success'}}">
        <image class="toast-icon" src="xxx" />
      </block>
      <block wx:if="{{type==='fail'}}">
        <image class="toast-icon" src="xxx" />
      </block>
    </view>
    <view class="toast-title">{{title}}</view>
  </view>
</view>

js

// components/toast/toast.js
Component({
 properties: {
 },
 data: {
  type: 'fail',
  title: '你还没有勾选呢!',
  isShow: false,
  animationData: ''
 },
 methods: {
  showToast: function (data) {
   const self = this;
   if (this._showTimer) {
    clearTimeout(this._showTimer)
   }
   if (this._animationTimer) {
    clearTimeout(this._animationTimer)
   }
   // display需要先设置为block之后,才能执行动画
   this.setData({
    title: data.title,
    type: data.type,
    isShow: true,
   });
   this._animationTimer = setTimeout(() => {
    const animation = wx.createAnimation({
     duration: 500,
     timingFunction: 'ease',
     delay: 0
    })
    animation.opacity(1).step();
    self.setData({
     animationData: animation.export(),
    })
   }, 50)
   this._showTimer = setTimeout(function () {
    self.hideToast();
    if (data.compelete && (typeof data.compelete === 'function')) {
     data.compelete()
    }
   }, 1200 || (50 + data.duration))
  },
  hideToast: function () {
   if (this._hideTimer) {
    clearTimeout(this._hideTimer)
   }
   let animation = wx.createAnimation({
    duration: 200,
    timingFunction: 'ease',
    delay: 0
   })
   animation.opacity(0).step();
   this.setData({
    animationData: animation.export(),
   })
   this._hideTimer = setTimeout(() => {
    this.setData({
     isShow: false,
    })
   }, 250)
  }
 }
})

json

{
 "component": true,
 "usingComponents": {}
}

wxss

/* components/toast/toast.wxss */
.toast-box {
 position: absolute;
 left: 0;
 top: 0;
 width: 100%;
 height: 100%;
 z-index: 11;
 display: none;
 opacity: 0;
}
.show{
 display: block;
}
.toast-content {
 position: absolute;
 left: 50%;
 top: 35%;
 width: 350rpx;
 /*height: 250rpx;*/
 border-radius: 10rpx;
 box-sizing: bordre-box;
 transform: translate(-50%, -50%);
 background: rgba(0, 0, 0, .7);
}
.toast-img{
  width: 100%;
  height: 120rpx;
  padding-top: 15rpx;
  box-sizing: bordre-box;
  text-align: center;
}
.toast-icon{
  width: 100rpx;
  height: 100rpx;
}
.toast-title {
  width: 100%;
  padding:10rpx;
  line-height: 65rpx;
  color: white;
  text-align: center;
  font-size: 40rpx;
  box-sizing: border-box;
}

使用

例如,在index.html中使用

在json中添加useComponents属性

"usingComponents": {
  "vas-prompt": "./components/toast/toast"
}

wxml

<vas-toast id='toast'></vas-toast>
<button bindtap="showToast">点击弹出toast</button>

js

//在onReady生命周期函数中,先获取prompt实例
onReady:function(){
  this.prompt = this.selectComponent("#toast");
},
showToast:function(){
  this.toast.showToast({
   type: 'success',
   title: '测试弹出消息',
   duration: 1000,
   compelete: function () {
    console.log('toast框隐藏之后,会调用该函数')
    //例如:跳转页面wx.navigateTo({ url: 'xxx' });
   }
  })
},

效果

微信小程序自定义toast组件的方法详解【含动画】

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
js中escape对应的C#解码函数 UrlDecode
Dec 16 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
vue 实现把路由单独分离出来
Aug 13 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 #jQuery
JS实现获取当前所在周的周六、周日示例分析
May 11 #Javascript
js核心基础之构造函数constructor用法实例分析
May 11 #Javascript
js核心基础之闭包的应用实例分析
May 11 #Javascript
vue下载excel的实现代码后台用post方法
May 10 #Javascript
微信小程序如何再次获取用户授权的方法
May 10 #Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 #Javascript
You might like
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
深入解析php模板技术原理【一】
2008/01/10 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python中subprocess的简单使用示例
2015/07/28 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python微信公众号开发平台
2018/01/25 Python
python实现音乐下载器
2018/04/15 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python实现猜数字游戏
2020/03/25 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
python实现学生管理系统开发
2020/07/24 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
Linux内核产生并发的原因
2016/11/08 面试题
网络工程师的自我评价
2013/10/02 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python