微信小程序之自定義底部彈出框動(dòng)畫(huà)

小程序.jpg

最近做小程序時(shí),會(huì)經(jīng)常用到各種彈框。直接做顯示和隱藏雖然也能達(dá)到效果,但是體驗(yàn)性太差,也比較簡(jiǎn)單粗暴。想要美美地玩,添加點(diǎn)動(dòng)畫(huà)還是非常有必要的。下面做一個(gè)底部上滑的彈框。

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">點(diǎn)我</button>

wxss

/*模態(tài)框*/
.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;}
/*動(dòng)畫(huà)前初始位置*/
.bottom-pos{-webkit-transform:translateY(100%);transform:translateY(100%);}

關(guān)鍵的部分來(lái)啦~~

js

Page({
    data:{
      hideModal:true, //模態(tài)框的狀態(tài)  true-隱藏  false-顯示
      animationData:{},//
    },

  // 顯示遮罩層
    showModal: function () {
    var that=this;
    that.setData({
      hideModal:false
    })
    var animation = wx.createAnimation({
      duration: 600,//動(dòng)畫(huà)的持續(xù)時(shí)間 默認(rèn)400ms   數(shù)值越大,動(dòng)畫(huà)越慢   數(shù)值越小,動(dòng)畫(huà)越快
      timingFunction: 'ease',//動(dòng)畫(huà)的效果 默認(rèn)值是linear
    })
    this.animation = animation 
    setTimeout(function(){
      that.fadeIn();//調(diào)用顯示動(dòng)畫(huà)
    },200)   
  },

  // 隱藏遮罩層
  hideModal: function () {
    var that=this; 
    var animation = wx.createAnimation({
      duration: 800,//動(dòng)畫(huà)的持續(xù)時(shí)間 默認(rèn)400ms   數(shù)值越大,動(dòng)畫(huà)越慢   數(shù)值越小,動(dòng)畫(huà)越快
      timingFunction: 'ease',//動(dòng)畫(huà)的效果 默認(rèn)值是linear
    })
    this.animation = animation
    that.fadeDown();//調(diào)用隱藏動(dòng)畫(huà)   
    setTimeout(function(){
      that.setData({
        hideModal:true
      })      
    },720)//先執(zhí)行下滑動(dòng)畫(huà),再隱藏模塊
    
  },

  //動(dòng)畫(huà)集
  fadeIn:function(){
    this.animation.translateY(0).step()
    this.setData({
      animationData: this.animation.export()//動(dòng)畫(huà)實(shí)例的export方法導(dǎo)出動(dòng)畫(huà)數(shù)據(jù)傳遞給組件的animation屬性
    })    
  },
  fadeDown:function(){
    this.animation.translateY(300).step()
    this.setData({
      animationData: this.animation.export(),  
    })
  }, 
})

帶動(dòng)畫(huà)的底部彈框效果已經(jīng)做好了,想體驗(yàn)的小伙伴們可以試一試!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容