微信小程序之實現頁面縮放式側滑效果

效果圖:小程序

實現原理:點擊按鈕,往須要動畫的div中添加或移除擁有動畫效果的class。微信小程序

因爲微信小程序中不能操做page這個根節點,因此,只有用一個div(view)來模仿page根節點。api

1.結構微信

<view class='page  {{isFix?"pageShow":"pageHide"}}' >
    <view class='header'>        
        <view class='h-toggle iconfont icon-list' bindtap='pageBtn'></view>
    </view>
</view>
<view class='r-box {{isFix?"fixShow":"fixHide"}}'  bindtap='fixHide'>
    <view class='r-list' catchtap='fixStopBu'>
        <view class='rl-close' catchtap='fixClose'>
            <text class='iconfont icon-close'></text>
        </view>        
    </view>
</view>

 上面的是最主要的結構,其它的內容就不貼了。ide

  (1)  isFix是切換動畫名的狀態動畫

  (2)  r-box設置了bindtap點擊事件以後,r-list也設置了一個不冒泡的catchtap事件,是爲了實現點擊r-box的空白處時,不冒泡的效果。this

 

2.樣式spa

page {
  height: 100%;
  width: 100%;
}
.page {
  width: 100%;
  height: 100%;
  box-shadow: 0 0 10px rgba(26,26,26,.1);
}
.r-box {
  position: fixed;
  top: 0;
  right: 0;
  width: 100%;
  height: 100%;
}
.r-box .r-list {
  float: right;
  width: 66%;
  height: 100%;
  background: white;
}
.fixHide {
  transition: all .3s ease;
  transform: translateX(100%);
}
.fixShow {
  transition: all .3s ease;
  transform: translateX(0%);
}
.pageHide {
  transition: all .3s ease;
  transform: translateX(0) scaleY(1);
}
.pageShow {
  transition: all .3s ease;
  transform: translateX(-70%) scaleY(0.9);
}

 這些是最主要的樣式:code

  (1)  class爲page的div(view),就是模擬整個page頁面,因此寬高須要設爲100%。orm

  (2)  r-box是右邊側滑的div(view)

  (3)  fixHide,fixShow這是側滑欄的動畫效果。

  (4)  pageHide,pageShow這是整個頁面的動畫效果

  (5)  因爲transform只能出現一次,因此當有兩個即以上的動畫效果時,只寫在一個transform裏,而後把不一樣的動畫效果分開就行。

  (6)  過渡效果的速度曲線我使用的是ease,若是用linear,在手機上會感受很卡頓。

 

3.js

Page({
   data:{
      isFix:false,//右側列表是否顯示        
   },
   // 右側列表顯示按鈕
   pageBtn:function(){
     this.setData({
        isFix:true
     })
   },
   //右側列表空白點擊
   fixHide:function(){
     this.setData({
        isFix: false
     })
   },
   //右側列表防冒泡,必須有,雖然沒內容
   fixStopBu: function () {},
   //右側列表關閉按鈕
   fixClose:function(){
     this.setData({
        isFix:false
     })
   },
})

 實現的過程大體就是這樣。仍是挺簡單的。不知道用小程序的動畫api作起來會不會簡單一些或者更順暢一點,這個就看本身勤不勤了。 

相關文章
相關標籤/搜索