微信小程序自定义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 相关文章推荐
event.srcElement+表格应用
Aug 29 Javascript
用javascript自动显示最后更新时间
Mar 15 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
Javascript实现鼠标右键特色菜单
Aug 04 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
VUE中的无限循环代码解析
Sep 22 Javascript
js经验分享 JavaScript反调试技巧
Mar 10 Javascript
Vue infinite update loop的问题解决
Apr 23 Javascript
通过JS深度判断两个对象字段相同
Jun 14 Javascript
Vue实现多标签选择器
Nov 28 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防止sql注入之过滤分页参数实例
2014/11/03 PHP
php图片上传类 附调用方法
2016/05/15 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
经济学博士求职自荐信范文
2013/11/23 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
体育运动口号
2014/06/09 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript