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:

相关推荐
头发还在的女程序员11 分钟前
小剧场短剧影视小程序源码分享,搭建自己的短剧小程序
人工智能·小程序·短剧·影视·微剧
是江迪呀2 小时前
小程序上线半年我赚了多少钱?
微信小程序·产品·创业
三天不学习9 小时前
UniApp三端实时通信实战:SignalR在H5、APP、小程序的差异与实现
微信小程序·uni-app·signalr
qq_12498707539 小时前
基于springboot归家租房小程序的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·小程序·毕业设计·计算机毕业设计
说私域10 小时前
留量为王,服务制胜:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径
人工智能·小程序·开源
游戏开发爱好者810 小时前
如何使用 AppUploader 提交上传 iOS 应用
android·ios·小程序·https·uni-app·iphone·webview
百锦再10 小时前
AI视频生成模型从无到有:构建、实现与调试完全指南
人工智能·python·ai·小程序·aigc·音视频·notepad++
恩创软件开发1 天前
创业日常2026-1-8
java·经验分享·微信小程序·小程序
腾讯云云开发1 天前
微信发布AI小程序成长计划:免费云开发资源+1亿token额度!
微信小程序·ai编程·小程序·云开发
开发加微信:hedian1161 天前
推客与分销场景下的系统架构实践:如何支撑高并发与复杂业务规则
小程序