您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何自定義實現小程序動畫彈框/提示框,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
如何自定義實現小程序動畫彈框/提示框
如下是wxml
代碼
<view> <view class="click-btn" catchtap="onBottomBox">彈出底部彈出框</view> <view class="click-btn" bindtap="onTopBox">彈出頂部提示框</view> <view wx:if="{{isBottom}}" class="bottom-box"> <div class="mask" bindtap="onHideBox"></div> <div class="pop">底部彈出內容</div> </view> <div wx:if="{{isTop}}" class="top-box">通知內容</div> </view>
/* pages/customalertbox/customalertbox.wxss */ .click-btn { width: 120px; height: 40px; line-height: 40px; text-align: center; margin: 20px auto; border: 1px solid #ccc; border-radius: 5px; } .top-box { width: 100%; height: 30px; background: #f56c6c; border-radius: 0 0 8px 8px; color: #fff; text-align: center; line-height: 30px; font-size: 28rpx; position: absolute; top: 0px; left: 0; animation-duration: 0.5s; animation-name: slidetop; } .mask { width: 100%; height: 100%; position: fixed; top: 0; left: 0; background: rgba(0, 0, 0, 0.5); } .pop { position: absolute; width: 100%; height: 180px; background: #42b983; border-radius: 8px 8px 0 0; position: absolute; bottom: 0px; animation-duration: 0.5s; animation-name: slidein; } @keyframes slidein { from { transform: translateY(70%); } to { transform: translateY(0); } } @keyframes slidetop { from { transform: translateY(-30px); } to { transform: translateY(0px); } }
// pages/customalertbox/customalertbox.js Page({ /** * 頁面的初始數據 */ data: { isBottom: false, isTop: false, }, /** * 生命周期函數--監聽頁面加載 */ onLoad: function(options) {}, onBottomBox() { this.setData({ isBottom: true, }); }, onHideBox() { this.setData({ isBottom: false, }); }, onTopBox() { this.setData({ isTop: true, }); setTimeout(() => { this.setData({ isTop: false, }); }, 2000); }, });
.pop { /* ... */ animation-duration: 0.5s; animation-name: slidein; // 動畫的名稱 } @keyframes slidein { // 定義動畫的名稱 from { transform: translateY(70%); // 平移,垂直方向上 } to { transform: translateY(0); } } .top-box { /* ... */ animation-duration: 0.5s; animation-name: slidetop; } @keyframes slidetop { from { transform: translateY(-30px); } to { transform: translateY(0px); } }
通過 css3
中的@keyframes
以及變換transform
,垂直方向上平移,實現動畫
示例效果如下所示
掘金不支持gif-實例效果可戳鏈接
以上是通過css3
的動畫animation
結合@keyframes
動畫幀實現的,那么在小程序當中,也可以通過官方的動畫API實現的
創建一個動畫實例 animation
,調用實例的方法來描述動畫。最后通過動畫實例的 export
方法導出動畫數據傳遞給組件的 animation
屬性
示例效果如下所示
掘金不支持gif-實例效果可戳鏈接
如下是實例代碼
<view> <view class="click-btn" bindtap="onBottomBox">彈出底部彈出框</view> <view class="click-btn" bindtap="onTopBox">彈出頂部提示框</view> <view wx:if="{{isBottom}}" style="position: absolute;width: 100%;height: 100%;bottom: 0px;" > <div class="mask" bindtap="onHideBox"></div> <div class="pop" animation="{{animationData}}">底部彈出內容</div> </view> <div wx:if="{{isTop}}" class="top-box">通知內容</div> </view>
主要是給想要添加動畫的元素添加了一個animation
屬性,現在的動畫是通過js去控制,而非css
如下代碼所示
// pages/customalertbox/customalertbox.js Page({ /** * 頁面的初始數據 */ data: { isBottom: false, isTop: false, animationData: {}, // 定義動畫對象 }, /** * 生命周期函數--監聽頁面加載 */ onLoad: function(options) {}, onBottomBox() { // 創建動畫 var animation = wx.createAnimation({ duration: 2000, timingFunction: 'ease', }); this.animation = animation; // 先在y軸偏移180,然后用step()完成一個動畫 animation.translateY(180).step(); this.setData({ animationData: animation.export(), isBottom: true, }); // 設置setTimeout來改變y軸偏移量,實現有感覺的滑動,回到初始位置 setTimeout(() => { animation.translateY(0).step(); this.setData({ animationData: animation.export(), }); }, 200); }, // 點擊遮罩層隱藏彈框 onHideBox() { var animation = wx.createAnimation({ duration: 2000, timingFunction: 'ease', }); this.animation = animation; // 先在y軸偏移180,然后用step()完成一個動畫 animation.translateY(180).step(); this.setData({ animationData: animation.export(), }); setTimeout(() => { animation.translateY(0).step(); this.setData({ animationData: animation.export(), isBottom: false, }); }, 200); }, onTopBox() { this.setData({ isTop: true, }); setTimeout(() => { this.setData({ isTop: false, }); }, 2000); }, });
以上就是通過微信小程序中動畫API
實現的完成的動畫,代碼要比 css3
要多一些,可以實現更加復雜的動畫效果
注意
如果是底部彈出框,拖動里面時,若遮罩層底部會跟著滾動,具體解決辦法也可以在外層添加catchtouchmove="true"
即可解決
<view> <view class="click-btn" bindtap="onBottomBox">彈出底部彈出框</view> <view catchtouchmove="true" wx:if="{{isBottom}}" style="position: absolute;width: 100%;height: 100%;bottom: 0px;" > <div class="mask" bindtap="onHideBox"></div> <div class="pop" animation="{{animationData}}">底部彈出內容</div> </view> <div wx:if="{{isTop}}" class="top-box">通知內容</div> </view>
關于“如何自定義實現小程序動畫彈框/提示框”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。