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


效果圖:

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

由於微信小程序中不能操作page這個根節點,所以,只有用一個div(view)來模仿page根節點。

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>

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

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

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

 

2.樣式

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);
}

 這些是最主要的樣式:

  (1)  class為page的div(view),就是模擬整個page頁面,所以寬高需要設為100%。

  (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做起來會不會簡單一些或者更順暢一點,這個就看自己勤不勤了。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM