微信小程序自定义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 相关文章推荐
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
jquery常用函数与方法汇总
Sep 01 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
动态创建Angular组件实现popup弹窗功能
Sep 15 Javascript
Vue使用mixins实现压缩图片代码
Mar 14 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
VueCli4项目配置反向代理proxy的方法步骤
May 17 Javascript
解决vue-router 切换tab标签关闭时缓存问题
Jul 22 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
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python正则表达式之对号入座篇
2018/07/24 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
对python生成业务报表的实例详解
2019/02/03 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
Django中提示消息messages的设置方式
2019/11/15 Python
python 命名规范知识点汇总
2020/02/14 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
网游商务专员求职信
2013/10/15 职场文书
病媒生物防治方案
2014/05/13 职场文书
企业文化宣传标语
2014/06/09 职场文书
村安全生产责任书
2014/08/25 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
铁路安全反思材料
2014/12/24 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python