微信小程序带动画弹窗组件使用方法详解


Posted in Javascript onNovember 27, 2018

本文实例为大家分享了微信小程序带动画弹窗的具体代码,供大家参考,具体内容如下

基本效果如下:

微信小程序带动画弹窗组件使用方法详解

具体实现如下:

第一步:

新建一个 components 文件夹,用于存放我们以后开发中的所用组件,在 components 组件中新建一个popup文件夹来存放我们的弹窗组件,在popup下右击新建 Component 并命名为 popup 后,会生成对应的 json wxml wxss js 4个文件,也就是一个自定义组件的组成部分,此时项目结构应该如下图所示:

微信小程序带动画弹窗组件使用方法详解

第二步上代码:

popup.wxml

<view hidden="{{!flag}}" class='container' style=''>
 <view bindtap='_error' class='wrap {{wrapAnimate}}' style='background:rgba(0,0,0,{{bgOpacity}});'></view>
 <view class='popup-container {{popupAnimate}}'>
 <view class="wx-popup-title">{{title}}</view>
 <view class="wx-popup-con">{{content}}</view>
 <view class="wx-popup-btn">
  <text class="btn-no" bindtap='_error'>{{btn_no}}</text>
  <text class="btn-ok" bindtap='_success'>{{btn_ok}}</text>
 </view>
 <image bindtap='_error' src='../../image/close.png' mode='widthFix' class='btn-colse'></image>
 </view>
</view>

popup.wxss

.container{font-size:15px;color:#666;font-weight: bold;z-index:2;position:fixed;width:100vw;height:100vh;}
.wrap{position:fixed;top:0;left:0;bottom:0;right:0;}
.popup-container {position: fixed;left: 50%;top: 100%;width: 80%;max-width: 600rpx;border: 2rpx solid #ccc;border-radius: 10rpx;box-sizing: bordre-box;transform: translate(-50%, -50%);background: #fff;opacity: 0;}
.wx-popup-title {width: 100%;padding: 20rpx 0;text-align: center;font-size: 40rpx;border-bottom: 2rpx solid #89cfea;}
.wx-popup-con {margin: 60rpx 10rpx;text-align: center;}
.wx-popup-btn {display: flex;justify-content: space-around;margin-bottom: 40rpx;}
.wx-popup-btn text {display: flex;align-items: center;justify-content: center;width: 30%;height: 88rpx;border: 2rpx solid #ccc;border-radius: 88rpx;}
.btn-colse{width:35px;height:35px;position:absolute;bottom:-60px;left:50%;margin-left:-17.5px;}
.wrapAnimate{animation: wrapAnimate 1s linear forwards}
@keyframes wrapAnimate{
 0%{}
 100%{background:rgba(0,0,0,0.7);}
}
.wrapAnimateOut{animation: wrapAnimateOut 1s 0.2s linear forwards}
@keyframes wrapAnimateOut{
 0%{background:rgba(0,0,0,0.7);}
 100%{background:rgba(0,0,0,0);}
}
.popupAnimate{animation: popupAnimate 1.2s linear forwards}
@keyframes popupAnimate{
 0%{}
 60%{top:47%;opacity: 1;}
 80%{top:53%;opacity: 1;}
 100%{top:50%;opacity: 1;}
}
.popupAnimateOut{animation: popupAnimateOut 1.2s linear forwards}
@keyframes popupAnimateOut{
 0%{top:50%;opacity: 1;}
 20%{top:47%;opacity: 1;}
 100%{}
}

popup.js

Component({
 options: {
 multipleSlots: true // 在组件定义时的选项中启用多slot支持
 },
 /*组件的属性列表*/
 properties: {
 title: {
  type: String,
  value: '标题'
 },
 // 弹窗内容
 content: {
  type: String,
  value: '内容'
 },
 // 弹窗取消按钮文字
 btn_no: {
  type: String,
  value: '取消'
 },
 // 弹窗确认按钮文字
 btn_ok: {
  type: String,
  value: '确定'
 }
 },
 /* 组件的初始数据 */
 data: {
 flag: true,
 bgOpacity:0,
 wrapAnimate:'wrapAnimate',
 popupAnimate:'popupAnimate'
 },
 /* 组件的方法列表 */
 methods: {
 //隐藏弹框
 hidePopup: function () {
  const that = this;
  this.setData({ bgOpacity: 0.7, wrapAnimate: "wrapAnimateOut", popupAnimate:"popupAnimateOut"})
  setTimeout(function(){
  that.setData({flag: false})
  },1200)
 },
 /* 内部私有方法建议以下划线开头 triggerEvent 用于触发事件 */
 _error() {//触发取消回调
  this.triggerEvent("error")
 },
 _success() {//触发成功回调
  this.triggerEvent("success");
 }
 }
})

popup.json

{
 "component": true,
 "usingComponents": {}
}

第三步引用组件:

index.json

{
 "usingComponents": {
 "popup":"/components/popup/popup"
 }
}

index.wxml

<popup
 id='popup'
 title='弹窗组件'
 content='学会了吗'
 btn_no='没有'
 btn_ok='学会了'
 binderror="_error"
 bindsuccess="_success"
 >

</popup>

index.js

Page({
 showPopup() {
 this.popup.showPopup();
 },
 //取消事件
 _error() {
 console.log('你点击了取消');
 this.selectComponent("#popup").hidePopup();
 },
 //确认事件
 _success() {
 console.log('你点击了确定');
 this.selectComponent("#popup").hidePopup();
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
Sep 17 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
微信小程序实现日历功能
Nov 27 #Javascript
微信小程序实现打卡日历功能
Sep 21 #Javascript
微信小程序实现时间预约功能
Nov 27 #Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 #Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 #Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 #Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 #jQuery
You might like
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
js控制table合并具体实现
2014/02/20 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
Python字符编码判断方法分析
2016/07/01 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
Python unittest框架操作实例解析
2020/04/13 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
九州传奇上机题
2014/07/10 面试题
《将心比心》教学反思
2014/04/08 职场文书
关于旅游的活动方案
2014/08/15 职场文书
刑事代理授权委托书
2014/09/17 职场文书
考试没考好检讨书
2015/05/06 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
Mysql排序的特性详情
2021/11/01 MySQL