微信小程序自定义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 代码压缩工具小结
Feb 27 Javascript
动态的创建一个元素createElement及删除一个元素
Jan 24 Javascript
node.js中的socket.io的广播消息
Dec 15 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
封装属于自己的JS组件
Jan 27 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 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获取网页内容方法总结
2008/12/04 PHP
php获取参数的几种方法总结
2014/02/18 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
javascript表单验证大全
2015/08/12 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
艺人经纪人岗位职责
2014/04/15 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
工作能力自我评价2015
2015/03/05 职场文书
女性励志书籍推荐
2019/08/19 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
Vue监视数据的原理详解
2022/02/24 Vue.js