微信小程序自定义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 validate 验证注册表单实例演示
Mar 25 Javascript
在js文件中如何获取basePath处理js路径问题
Jul 10 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
vue.js element-ui validate中代码不执行问题解决方法
Dec 18 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
从原生JavaScript到React深入理解
Jul 23 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
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Js组件的一些写法
2010/09/10 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
2016十一国庆节感言
2015/12/09 职场文书
Oracle使用别名的好处
2022/04/19 Oracle