微信小程序自定义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中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
编程语言JavaScript简介
Oct 16 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
JavaScript中return false的用法
Mar 12 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
electron+vue实现div contenteditable截图功能
Jan 07 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
在JavaScript中如何使用宏详解
May 06 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/07/24 PHP
php array的学习笔记
2012/05/16 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
详解php中的implements 使用
2017/06/13 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python使用fork实现守护进程的方法
2017/11/16 Python
python验证码识别实例代码
2018/02/03 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
详解Python中的路径问题
2020/09/02 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
交通事故检查书范文
2014/01/30 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
高中课程设置方案
2014/05/28 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
春晚观后感
2015/06/11 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers