1. 程式人生 > >微信小程式-表單彈窗示例

微信小程式-表單彈窗示例

開發中有時候會碰到需要一個表單彈窗來處理資料的提交處理,然後這次釋出的這套原始碼就是解決這個問題!


WXML程式碼如何:

<!--button-->  
<view class="btn" bindtap="powerDrawer" data-statu="open">button</view>  
  
<!--mask-->  
<view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if="{{showModalStatus}}"></view>  
<!--content-->  
<!--使用animation屬性指定需要執行的動畫-->  
<view animation="{{animationData}}" class="drawer_box" wx:if="{{showModalStatus}}">  
  
  <!--drawer content-->  
  <view class="drawer_title">彈窗標題</view>  
  <view class="drawer_content">  
    <view class="top grid">  
      <label class="title col-0">標題</label>  
      <input class="input_base input_h30 col-1" name="rName" value="可自行定義內容"></input>  
    </view>  
    <view class="top grid">  
      <label class="title col-0">標題</label>  
      <input class="input_base input_h30 col-1" name="mobile" value="110"></input>  
    </view>  
    <view class="top grid">  
      <label class="title col-0">標題</label>  
      <input class="input_base input_h30 col-1" name="phone" value="拒絕伸手黨"></input>  
    </view>  
    <view class="top grid">  
      <label class="title col-0">標題</label>  
      <input class="input_base input_h30 col-1" name="Email" value="僅供學習使用"></input>  
    </view>  
    <view class="top bottom grid">  
      <label class="title col-0">備註</label>  
      <input class="input_base input_h30 col-1" name="bz"></input>  
    </view>  
  </view>  
  <view class="btn_ok" bindtap="powerDrawer" data-statu="close">確定</view>  
</view>

JS程式碼如何:

Page({  
  data: {  
    showModalStatus: false  
  },  
  powerDrawer: function (e) {  
    var currentStatu = e.currentTarget.dataset.statu;  
    this.util(currentStatu)  
  },  
  util: function(currentStatu){  
    /* 動畫部分 */  
    // 第1步:建立動畫例項   
    var animation = wx.createAnimation({  
      duration: 200,  //動畫時長  
      timingFunction: "linear", //線性  
      delay: 0  //0則不延遲  
    });  
      
    // 第2步:這個動畫例項賦給當前的動畫例項  
    this.animation = animation;  
  
    // 第3步:執行第一組動畫  
    animation.opacity(0).rotateX(-100).step();  
  
    // 第4步:匯出動畫物件賦給資料物件儲存  
    this.setData({  
      animationData: animation.export()  
    })  
      
    // 第5步:設定定時器到指定時候後,執行第二組動畫  
    setTimeout(function () {  
      // 執行第二組動畫  
      animation.opacity(1).rotateX(0).step();  
      // 給資料物件儲存的第一組動畫,更替為執行完第二組動畫的動畫物件  
      this.setData({  
        animationData: animation  
      })  
        
      //關閉  
      if (currentStatu == "close") {  
        this.setData(  
          {  
            showModalStatus: false  
          }  
        );  
      }  
    }.bind(this), 200)  
    
    // 顯示  
    if (currentStatu == "open") {  
      this.setData(  
        {  
          showModalStatus: true  
        }  
      );  
    }  
  }  
  
})  

WXSS程式碼如何:

/*button*/  
.btn {  
  width: 80%;  
  padding: 20rpx 0;  
  border-radius: 10rpx;  
  text-align: center;  
  margin: 40rpx 10%;  
  background: #000;  
  color: #fff;  
}  
  
/*mask*/  
.drawer_screen {  
  width: 100%;  
  height: 100%;  
  position: fixed;  
  top: 0;  
  left: 0;  
  z-index: 1000;  
  background: #000;  
  opacity: 0.5;  
  overflow: hidden;  
}  
  
/*content*/  
.drawer_box {  
  width: 650rpx;  
  overflow: hidden;  
  position: fixed;  
  top: 50%;  
  left: 0;  
  z-index: 1001;  
  background: #FAFAFA;  
  margin: -150px 50rpx 0 50rpx;  
  border-radius: 3px;  
}  
  
.drawer_title{  
  padding:15px;  
  font: 20px "microsoft yahei";  
  text-align: center;  
}  
.drawer_content {  
  height: 210px;  
  overflow-y: scroll; /*超出父盒子高度可滾動*/  
}  
  
.btn_ok{  
  padding: 10px;  
  font: 20px "microsoft yahei";  
  text-align: center;  
  border-top: 1px solid #E8E8EA;  
  color: #3CC51F;  
}  
  
.top{  
    padding-top:8px;  
}  
.bottom {  
    padding-bottom:8px;  
}  
.title {  
    height: 30px;  
    line-height: 30px;  
    width: 160rpx;  
    text-align: center;  
    display: inline-block;  
    font: 300 28rpx/30px "microsoft yahei";  
}  
  
.input_base {  
    border: 2rpx solid #ccc;  
    padding-left: 10rpx;  
    margin-right: 50rpx;  
}  
.input_h30{  
    height: 30px;  
    line-height: 30px;  
}  
.input_h60{  
    height: 60px;  
}  
.input_view{  
    font: 12px "microsoft yahei";  
    background: #fff;  
    color:#000;  
    line-height: 30px;  
}  
  
input {  
    font: 12px "microsoft yahei";  
    background: #fff;  
    color:#000 ;  
}  
radio{  
    margin-right: 20px;  
}  
.grid { display: -webkit-box; display: box; }  
.col-0 {-webkit-box-flex:0;box-flex:0;}  
.col-1 {-webkit-box-flex:1;box-flex:1;}  
.fl { float: left;}  
.fr { float: right;}