支付宝小程序实现自定义底部弹窗popup组件
发表时间:2020-9-21
发布人:葵宇科技
浏览次数:114
支付宝小程序实现自定义底部弹窗popup组件
view
<view class="am-popup {{className}} {{show ? 'am-popup-show' : ''}} {{ animation ? 'animation': '' }}" disable-scroll="{{disableScroll}}">
<view class="am-popup-mask" a:if="{{mask}}" onTap="onMaskTap" style="z-index: {{zIndex}}"></view>
<view class="am-popup-content am-popup-{{position}}" style="z-index: {{zIndex}}"><slot /></view>
</view>
js
Component({
mixins: [],
data: {
},
props: {
className: '',
show: false,
position: 'bottom',
mask: true,
animation: true,
disableScroll: true,
},
didMount() {},
didUpdate() {},
didUnmount() {},
methods: {
onMaskTap() {
const { onClose, animation } = this.props;
if (onClose) {
if (animation) {
onClose();
} else {
setTimeout(() => {
onClose();
}, 200);
}
}
},
},
});
css
.am-popup-content {
position: fixed;
z-index: 9999
}
.am-popup-mask {
visibility: hidden;
width: 100%;
height: 100%;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.75);
opacity: 0;
z-index: 9999;
}
.am-popup-left {
transform: translateX(-100%);
left: 0;
top: 0;
bottom: 0;
}
.am-popup-right {
transform: translateX(100%);
right: 0;
top: 0;
bottom: 0;
}
.am-popup-top {
top: 0;
width: 100vw;
transform: translateY(-100%);
}
.am-popup-bottom {
bottom: 0;
width: 100vw;
transform: translateY(100%);
}
.am-popup-show .am-popup-content {
transform: none;
background: white;
}
.am-popup-show .am-popup-mask {
visibility: visible;
opacity: 1;
}
.am-popup.animation .am-popup-content {
transition: all 200ms linear;
}
.am-popup.animation .am-popup-mask {
transition: all 200ms linear;
}