最近做小程序時,會經常用到各種彈框。直接做顯示和隱藏雖然也能達到效果,但是體驗性太差,也比較簡單粗暴。想要美美地玩,添加點動畫還是非常有必要的。下面做一個底部上滑的彈框。
wxml
<view class="modals modals-bottom-dialog" hidden="{{hideModal}}"> <view class="modals-cancel" bindtap="hideModal"></view> <view class="bottom-dialog-body bottom-pos" animation="{{animationData}}"></view> </view> <button bindtap="showModal">點我</button>
wxss
/*模態框*/ .modals{position:fixed; z-index: 999; top:0; left: 0; right:0; bottom: 0;} .modals-cancel{position:absolute; z-index:1000; top:0; left: 0; right:0; bottom: 0; background-color: rgba(0,0,0,.5);} .bottom-dialog-body{position:absolute; z-index:10001; bottom:0; left:0; right:0; padding:30rpx; height:300rpx; background-color: #fff;} /*動畫前初始位置*/ .bottom-pos{-webkit-transform:translateY(100%);transform:translateY(100%);}
關鍵的部分來啦~~
js
Page({ data:{ hideModal:true, //模態框的狀態 true-隱藏 false-顯示 animationData:{},// }, // 顯示遮罩層 showModal: function () { var that=this; that.setData({ hideModal:false }) var animation = wx.createAnimation({ duration: 600,//動畫的持續時間 默認400ms 數值越大,動畫越慢 數值越小,動畫越快 timingFunction: 'ease',//動畫的效果 默認值是linear }) this.animation = animation setTimeout(function(){ that.fadeIn();//調用顯示動畫 },200) }, // 隱藏遮罩層 hideModal: function () { var that=this; var animation = wx.createAnimation({ duration: 800,//動畫的持續時間 默認400ms 數值越大,動畫越慢 數值越小,動畫越快 timingFunction: 'ease',//動畫的效果 默認值是linear }) this.animation = animation that.fadeDown();//調用隱藏動畫 setTimeout(function(){ that.setData({ hideModal:true }) },720)//先執行下滑動畫,再隱藏模塊 }, //動畫集 fadeIn:function(){ this.animation.translateY(0).step() this.setData({ animationData: this.animation.export()//動畫實例的export方法導出動畫數據傳遞給組件的animation屬性 }) }, fadeDown:function(){ this.animation.translateY(300).step() this.setData({ animationData: this.animation.export(), }) }, })
轉 : https://www.jianshu.com/p/cea2d4dc24d1