微信小程序 实现从顶部弹出的下拉框

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 14:42   44   0

效果图:


我尝试了微信提供的API wx.animation去实现这个功能,但很是麻烦,而且对于我这刚接触小程序的渣渣而言,实现起来也很是困难。所以我换了种方法,采用CSS的动画去实现。

wxml:

<image class='fabiao' src='../icon/fabiao2.png' bindtap='fabiao'></image>
<!--触发下拉框的组件,我这里是一个发表图标-->
<view class='zhezhao' hidden="{{flag}}">
  <!--这是一个遮罩层,在框弹出后遮住框外区域-->
  </view>
  <!--这是下拉框中的内容,一个文本框和一个按钮,按钮触发拉起事件,表示拉起下拉框-->
  <view class="test3 {{test=='test1'?'test1':'test2'}}" style='display:{{yesorno}};'>
    <view class='input-content'>
      <textarea class='ta' placeholder="元芳,有何要说的么?" auto-focus />
    </view>
    <button class='btn' bindtap='laqi'>发表</button>
  </view>

WXSS:

.zhezhao {
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0px;
  background: rgba(0, 0, 0, 0.4);
  overflow: hidden;
}

@keyframes myfirst {
  from {
    transform: translateY(-860rpx);
  }

  to {
    transform: translateY(0rpx);
  }
}

@keyframes mylast {
  from {
    transform: translateY(0rpx);
  }

  to {
    transform: translateY(-900rpx);
  }
}

.test2 {
  animation: mylast;
  animation-duration: 1s;
  animation-iteration-count: 1;
  animation-fill-mode: forwards;
  width: 750rpx;
  height: 860rpx;
  border: 2rpx solid #ededed;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1454;
  background-color: #fff;
}

.test1 {
  animation: myfirst;
  animation-duration: 0.5s;
  animation-iteration-count: 1;
  animation-fill-mode: forwards;
  width: 750rpx;
  height: 860rpx;
  border: 2rpx solid #ededed;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1454;
  background-color: #fff;
}

.btn {
  width: 700rpx;
  height: 100rpx;
  position: absolute;
  bottom: 0;
  left: 0;
  margin: 10rpx;
  margin-left: 25rpx;
  
}

.test3{
  display: flex;
  flex-direction: column;
  background-color: #ededed;

}

.input-content{
  width: 100%;
  height: 400rpx;
  border:2rpx solid #ededed;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 40rpx;
  background-color: #fff;
}


.ta{
  width: 650rpx;
  height: 250rpx;
  margin-bottom: 20rpx;
  margin-top: 110rpx;
  /* border: 8rpx solid red;  */
  margin-left: auto;
  margin-right: auto;
 

}


JS:

data{

    animate: 'myfirst',
    yesorno: 'none',
    flag: true,
    test:'test1'

}

fabiao: function () {

    this.setData({
      yesorno: 'block'
    })

    this.setData({
      test: 'test1'
    })

    this.setData({
      flag: false
    })

  },
  laqi: function () {

    this.setData({
      test: 'test2',
    })
    this.setData({
      flag: true
    })
  }





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP