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


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 相关文章推荐
JavaScript中使用replace结合正则实现replaceAll的效果
Jun 04 Javascript
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
解析js如何获取当前url中的参数值并复制给input
Jun 23 Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
微信小程序仿朋友圈发布动态功能
Jul 15 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
ES2020 已定稿,真实场景案例分析
May 25 Javascript
基于JS实现快速读取TXT文件
Aug 25 Javascript
js实现抽奖功能
Nov 24 Javascript
微信小程序实现日历功能
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的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
js获取单选按钮的数据
2006/11/27 Javascript
用js实现预览待上传的本地图片
2007/03/15 Javascript
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
详解vue-cli3使用
2018/08/14 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
python中的多重继承实例讲解
2014/09/28 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
Python字符串的全排列算法实例详解
2019/01/07 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python logging 日志的级别调整方式
2020/02/21 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
委托书范本
2014/04/02 职场文书
家长通知书家长评语
2014/04/17 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
祝寿主持词
2015/07/02 职场文书
交通安全教育心得体会
2016/01/15 职场文书