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:

相关推荐
2501_916007473 小时前
iOS性能调试工具终极指南,从系统底层到多端协同的全方位优化实践(2025版)
android·ios·小程序·https·uni-app·iphone·webview
2501_915921433 小时前
iOS崩溃日志深度分析与工具组合实战,从符号化到自动化诊断的完整体系
android·ios·小程序·uni-app·自动化·cocoa·iphone
我很苦涩的10 小时前
使用微信小程序实现多格验证码效果
微信小程序·小程序
阿里花盘10 小时前
花店微信小程序怎么做,创建一个小程序需要多少钱
微信小程序·小程序
2501_9160088911 小时前
没有源码如何加密 IPA 实战流程与多工具组合落地指南
android·ios·小程序·https·uni-app·iphone·webview
LXA080912 小时前
UniApp 小程序中使用地图组件
小程序·uni-app·notepad++
bug总结13 小时前
更新原生小程序封装(新增缓存订阅)完美解决
前端·缓存·小程序
2501_9335090715 小时前
无锡制造企税惠防错指南:知了问账帮守政策红利线
大数据·人工智能·微信小程序
汤姆yu18 小时前
基于微信小程序的智慧社区娱乐服务管理平台
微信小程序·娱乐
2501_9159090619 小时前
Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
android·flutter·ios·ci/cd·小程序·uni-app·iphone