簡單分享一下經常使用的底部彈窗層或下拉框彈出層(代碼須要修改)的內容彈窗的動畫效果,這裏分享的是點擊按鈕後底部彈窗的動畫效果。第一種方式是動態設置顯示區域的高度,第二種方法是動態設置顯示區域的移動的位置(使用到transform:translateY
);css
一、wxml代碼:html
<button catchtap='clickPup'>點擊底部動畫彈窗</button>
<!-- 底部彈窗動畫的內容 -->
<view class='pupContent {{click? "showContent": "hideContent"}} {{option? "open": "close"}}' hover-stop-propagation='true'>
<view class='pupContent-top'>測試一下</view>
</view>
<!-- 固定的背景 -->
<view class='pupContentBG {{click?"showBG":"hideBG"}} {{option?"openBG":"closeBG"}}' catchtap='clickPup'>
</view>
複製代碼
二、wxss代碼:python
.pupContentBG {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
}
.pupContent {
width: 100%;
background: pink;
position: absolute;
bottom: 0;
box-shadow: 0 0 10rpx #333;
height: 0;
z-index: 999;
}
/* 設置顯示的背景 */
.showBG {
display: block;
}
.hideBG {
display: none;
}
/* 彈出或關閉動畫來動態設置內容高度 */
@keyframes slideBGtUp {
from {
background: transparent;
}
to {
background: rgba(0, 0, 0, 0.1);
}
}
@keyframes slideBGDown {
from {
background: rgba(0, 0, 0, 0.1);
}
to {
background: transparent;
}
}
/* 顯示或關閉內容時動畫 */
.openBG {
animation: slideBGtUp 0.5s ease-in both;
/* animation-fill-mode: both 動畫將會執行 forwards 和 backwards 執行的動做。 */
}
.closeBG {
animation: slideBGDown 0.5s ease-in both;
/* animation-fill-mode: both 動畫將會執行 forwards 和 backwards 執行的動做。 */
}
/* 設置顯示內容 */
.showContent {
display: block;
}
.hideContent {
display: none;
}
/* 彈出或關閉動畫來動態設置內容高度 */
@keyframes slideContentUp {
from {
height: 0;
}
to {
height: 800rpx;
}
}
@keyframes slideContentDown {
from {
height: 800rpx;
}
to {
height: 0;
}
}
/* 顯示或關閉內容時動畫 */
.open {
animation: slideContentUp 0.5s ease-in both;
/* animation-fill-mode: both 動畫將會執行 forwards 和 backwards 執行的動做。 */
}
.close {
animation: slideContentDown 0.5s ease-in both;
/* animation-fill-mode: both 動畫將會執行 forwards 和 backwards 執行的動做。 */
}
複製代碼
三、js代碼:小程序
data: {
click: false, //是否顯示彈窗內容
option: false, //顯示彈窗或關閉彈窗的操做動畫
},
// 用戶點擊顯示彈窗
clickPup: function() {
let _that = this;
if (!_that.data.click) {
_that.setData({
click: true,
})
}
if (_that.data.option) {
_that.setData({
option: false,
})
// 關閉顯示彈窗動畫的內容,不設置的話會出現:點擊任何地方都會出現彈窗,就不是指定位置點擊出現彈窗了
setTimeout(() => {
_that.setData({
click: false,
})
}, 500)
} else {
_that.setData({
option: true
})
}
},
複製代碼
相對於第一種代碼修改的部分:只修改的了粉紅色區域的高度和粉紅色區域彈出和收回的動畫效果:微信小程序
/* 彈出或關閉動畫來動態設置內容高度 */
@keyframes slideContentUp {
from {
transform: translateY(100%); /*設置爲正數則底部彈出來,負數則相反*/
}
to {
transform: translateY(0%);
}
}
@keyframes slideContentDown {
from {
transform: translateY(0%);
}
to {
transform: translateY(100%);
}
}
複製代碼
參考資料:微信
感謝閱讀。xss