• 雷林鹏分享:小程序自定义类似于选择器弹框


      在开发小程序时,隐藏和显示是我们用的比较多的一种,但是就简简单单的显示隐藏,有的时候觉得太low,所以分享一个类似于城市选择器那种从下到上的那种弹框;

      这中间就要用到小程序动画Animation

      已经是写好的小demo;可以直接拿过来使用;

      .wxml

      <buttonbindtap="showModel">弹框显示</button>

      <!--弹框-->

      <!--渐深的背景层-->

      <viewclass='{{bg}}'catchtap="hidden"style="visibility:{{backgroundVisible?'visible':'hidden'}};z-index:30"></view>

      <!--底部弹出层-->

      <viewclass="element-wrapper"animation="{{animation}}"style="visibility:{{show?'visible':'hidden'}}">

      <viewclass="specifibox"style="padding-bottom:{{isIphoneX?64:0}}rpx">

      <viewclass="top_imgs">

      <textcatchtap="hidden"class="del">隐藏</text>

      </view>

      <viewclass="specifibox_bottom">

      <viewclass="box_li_parent">

      <viewclass="box_li">

      <viewclass="classNav">

      <textclass="specification">型号</text>

      </view>

      <view>

      <text>window10专业版</text>

      </view>

      </view>

      </view>

      </view>

      </view>

      </view>

      .wxss如果想要改变弹框的高度需要在specifibox属性名中更改属性

      .background{

      background-color:rgba(0,0,0,0);

      100vw;

      height:100vh;

      position:absolute;

      top:0;

      z-index:99;

      }

      .bg{

      background:rgba(0,0,0,0.4);

      100vw;

      height:100vh;

      position:absolute;

      top:0;

      transition-property:background-color;

      transition-timing-function:ease;

      transition-duration:1s;

      transition-delay:0;

      z-index:99;

      }

      .del{

      72rpx;

      height:28rpx;

      position:absolute;

      right:24rpx;

      top:20rpx;

      color:#fff;

      }

      .element-wrapper{

      display:flex;

      position:fixed;

      left:0;

      bottom:0;

      750rpx;

      height:920rpx;

      z-index:888;

      }

      /*规格弹框*/

      .specifibox{

      750rpx;

      height:920rpx;

      background:#191919;

      border-radius:20rpx20rpx0px0px;

      position:absolute;

      left:0;

      bottom:0;

      z-index:11;

      }

      .top_imgs{

      display:flex;

      position:relative;

      margin-bottom:15rpx;

      height:50rpx;

      100%;

      }

      .box_li_parent{

      height:770rpx;

      overflow:auto;

      }

      .box_li{

      display:flex;

      flex-wrap:wrap;

      margin-bottom:30rpx;

      }

      .box_li>view{

      border:1pxsolidrgba(255,255,255,1);

      border-radius:4rpx;

      padding:9rpx18rpx8rpx19rpx;

      margin-left:24rpx;

      margin-top:20rpx;

      display:flex;

      justify-content:center;

      align-items:center;

      }

      .box_li>view>text{

      font-size:24rpx;

      font-weight:400;

      color:rgba(255,255,255,1);

      }

      .box_li>.classNav{

      100%;

      display:block;

      margin-left:24rpx;

      margin-top:0;

      padding:0;

      border-radius:0;

      background:#191919;

      border:none;

      }

      .box_li>.classNav>.specification{

      font-size:30rpx;

      font-weight:500;

      color:rgba(255,255,255,1);

      }

      .boxs_1{

      height:514rpx;

      100%;

      }

      .js

      varaction='';

      varmoveY=200;

      varanimation=animation=wx.createAnimation({

      transformOrigin:"50%50%",

      duration:400,

      timingFunction:"ease",

      delay:0

      })

      animation.translateY(moveY+'vh').step();

      Page({

      /**

      *页面的初始数据

      */

      data:{

      animation:animation,

      bg:'background',

      backgroundVisible:false,

      show:false,

      isIphoneX:false

      },

      //隐藏弹窗浮层

      hidden(e){

      moveY=200;

      action='hide';

      animationEvents(this,moveY,action);

      },

      //规格按钮点击事件

      showModel:function(e){

      moveY=0;

      action='show';

      animationEvents(this,moveY,action);

      },

      })

      //动画事件底部的弹出,背景层通过切换不同的class,添加一个transition的效果,使之有一个渐变的感觉。

      functionanimationEvents(that,moveY,action){

      that.animation=wx.createAnimation({

      transformOrigin:"50%50%",

      duration:400,

      timingFunction:"ease",

      delay:0

      })

      that.animation.translateY(moveY+'vh').step()

      if(action=='show'){

      that.setData({

      animation:that.animation.export(),

      show:true,

      backgroundVisible:true,

      bg:'bg',

      disableScroll:'disableScroll'

      });

      }elseif(action=='hide'){

      that.setData({

      animation:that.animation.export(),

      show:false,

      backgroundVisible:false,

      bg:'background',

      disableScroll:''

      });

      }

      }

    (编辑:雷林鹏 来源:网络|侵删)

  • 相关阅读:
    Lc20-Valid Parentheses
    Lc262-行程和用户
    Lc197-Rising Temperature
    Lc196-删除重复的电子邮箱
    Lc185-部门工资前三高的所有员工
    Lc18-四数之和
    Lc17-电话号码的字母组合
    Netty Java NIO 基本介绍 之 Selector,ServerSocketChannel , SocketChannel (二)
    Netty(二)工作原理模型
    Netty 异步模型
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/12559663.html
Copyright © 2020-2023  润新知