微信小程序自定义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 相关文章推荐
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
Feb 02 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
vue中计算属性(computed)、methods和watched之间的区别
Jul 27 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 Javascript
jquery实现选项卡切换代码实例
May 14 jQuery
解析原来浏览器原生支持JS Base64编码解码
Aug 12 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 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
PHP对象相关知识总结
2017/04/09 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python3人脸识别的两种方法
2019/04/25 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python写程序统计词频的方法
2019/07/29 Python
python interpolate插值实例
2020/07/06 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
广告学专业推荐信范文
2013/11/23 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
公务员年度考核评语
2014/12/31 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
增值税发票丢失证明
2015/06/19 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python