微信小程序自定义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中Eval函数的使用说明
Oct 11 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
Apr 01 Javascript
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
js中的异常处理try...catch使用介绍
Sep 21 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
再谈JavaScript线程
Jul 10 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
Javascript组合继承方法代码实例解析
Apr 02 Javascript
原生js实现滑块区间组件
Jan 20 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP实现小偷程序实例
2016/10/31 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
python中__call__方法示例分析
2014/10/11 Python
详细探究Python中的字典容器
2015/04/14 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
python之Character string(实例讲解)
2017/09/25 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
计算机应用职专应届生求职信
2013/11/12 职场文书
小学毕业感言300字
2014/02/19 职场文书
工程材料采购方案
2014/05/18 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
敬老月活动总结
2014/08/28 职场文书
志愿者工作心得体会
2016/01/15 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
js Proxy的原理详解
2021/05/25 Javascript