wepy微信小程序自定义底部弹出框功能,显示与隐藏效果(淡入淡出,滑入滑出)

视图html部分

复制代码
  <view class="salePz">

 <view class="btnSelPz" @tap="pzModelClick">去选择</view>

  <!-- modal -->
 <view class="modal modal-bottom-dialog" hidden="{{hideFlag}}">
 <view class="modal-cancel" bindtap="hideModal"></view>
 <view class="bottom-dialog-body bottom-positon" animation="{{animationData}}">
  <!-- -->
  <view class='Mselect'>
  <view wx:for="{{optionList}}" wx:key="unique" data-value='{{item}}' bindtap='getOption'>
   {{item}}
  </view>
  </view>
  <view></view>
  <view class='Mcancel' bindtap='mCancel'>
  <text>取消</text>
  </view>
 </view>
 </view>

 </view>

style样式

复制代码
<style lang="less">

.btnSelPz{
  width: 150rpx;
  height: 60rpx;
    display: flex;
  justify-content: center;
  align-items: center;
  background: #2a67ea;
  border-radius: 10rpx;
  color: white;
margin-left: 10rpx;
}

// 底部弹出框-------------------------------------------
.arrow{
 display:inline-block;
 border:6px solid transparent;
 border-top-color:#000;
 margin-left:8px;
 position:relative;
 top:6rpx;
}
/* ---------------------------- */
/*模态框*/
.modal{position:fixed; top:0; right:0; bottom:0; left:0; z-index:1000;}
.modal-cancel{position:absolute; z-index:2000; top:0; right:0; bottom: 0; left:0; background:rgba(0,0,0,0.3);}
.bottom-dialog-body{width:100%; position:absolute; z-index:3000; bottom:0; left:0;background:#dfdede;}
/*动画前初始位置*/
.bottom-positon{-webkit-transform:translateY(100%);transform:translateY(100%);}


/* 底部弹出框 */
.bottom-positon{
 text-align: center;
}
.Mselect{
 margin-bottom: 20rpx;
}
.Mselect view{
 padding: 26rpx 0;
 background: #fff;
}
.Mselect view:not(:last-of-type){
 border-bottom: 1px solid #dfdede;
}
.Mcancel{
 background: #fff;
 padding: 26rpx 0;
}
</style>

js部分

复制代码
 export default class Web extends wepy.page {
    data = {
   //弹出框
      optionList:['所有','选项1','选项2'],
      value:'所有',
      hideFlag: true,//true-隐藏 false-显示
      animationData: {},//
  }
 }


     // 显示遮罩层
      showModal () {
      this.hideFlag=false
      // 创建动画实例
      var animation = wx.createAnimation({
        duration: 400,//动画的持续时间
        timingFunction: 'ease',//动画的效果 默认值是linear->匀速,ease->动画以低速开始,然后加快,在结束前变慢
      })
      this.animation = animation; //将animation变量赋值给当前动画
      var that=this
      var time1 = setTimeout(function () {
        that.slideIn();//调用动画--滑入
        //  var that = this;
        clearTimeout(time1);
        time1 = null;
      }, 100)
          this.$apply()
      }

      // 隐藏遮罩层
      hideModal () {
      var animation = wx.createAnimation({
        duration: 400,//动画的持续时间 默认400ms
        timingFunction: 'ease',//动画的效果 默认值是linear
      })
      this.animation = animation
      this.slideDown();//调用动画--滑出
      var that=this
      var time1 = setTimeout(function () {
        that.hideFlag=true
         that.$apply()
        clearTimeout(time1);
        time1 = null;
      }, 220)//先执行下滑动画,再隐藏模块
          this.$apply()
      }
          //动画 -- 滑入
      slideIn (){
      this.animation.translateY(0).step() // 在y轴偏移,然后用step()完成一个动画
        this.animationData=this.animation.export()
          this.$apply()
      }
      //动画 -- 滑出
      slideDown(){
      this.animation.translateY(300).step()
        this.animationData= this.animation.export()
          this.$apply()
      }

    methods = {
      // 点击选项
    getOption(e){
      this.value=e.currentTarget.dataset.value
      this.hideFlag=true
      this.$apply()
    },
    //取消
    mCancel() {
    this.hideModal();
        this.$apply()
    },


 methods = {
      // 点击选项
    getOption(e){
      this.value=e.currentTarget.dataset.value
      this.hideFlag=true
      this.$apply()
    },
    //取消
    mCancel() {
    this.hideModal();
        this.$apply()
    },

}

Tips:

相关推荐
CHU7290351 小时前
在线教学课堂APP前端功能:搭建高效线上教学生态
前端·人工智能·小程序·php
2501_916007476 小时前
跨平台 App 安全,Flutter、RN、Unity、H5 混合应用加固
android·ios·小程序·https·uni-app·iphone·webview
焦糖玛奇朵婷7 小时前
就医陪诊小程序|从软件开发视角看实用度✨
java·大数据·jvm·算法·小程序
CHU7290358 小时前
智慧陪伴新选择:陪诊陪护预约小程序的暖心功能解析
java·前端·小程序·php
2501_916007478 小时前
不越狱如何查看iOS 应用的详细信息及其文件目录结构
android·macos·ios·小程序·uni-app·cocoa·iphone
李慕婉学姐10 小时前
【开题答辩过程】以《基于uni-app的手账记录小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·小程序·uni-app
前端 贾公子10 小时前
npm 发包配置双重身份验证
前端·javascript·微信小程序·小程序·github
2501_9160088911 小时前
无需钥匙串快速创建 iOS 开发 / 发布证书 P12 CSR
android·ios·小程序·https·uni-app·iphone·webview
独自归家的兔11 小时前
微信小程序开发框架全解析:成熟项目架构、主流技术与优劣对比
微信小程序·小程序
全栈小512 小时前
【小程序】微信小程序开发,分享给朋友或者朋友圈的功能增加地址参数,以及如何进行带参数本地测试
微信小程序·小程序