我打算写一个popup弹窗,通过show参数控制,当show开关的时候有开启或者关闭的动画,请给我一个对应的完整的微信小程序的组件代码
时间: 2024-03-15 18:46:38 浏览: 62
微信小程序通用弹窗组件
以下是一个简单的微信小程序组件代码,实现了一个自定义的 popup 弹窗组件:
```
<!-- popup.wxml -->
<view class="popup-mask" bindtap="closePopup" wx:if="{{show}}">
<view class="popup" animation="{{animationData}}">{{content}}</view>
</view>
// popup.js
Component({
properties: {
show: {
type: Boolean,
value: false,
},
content: {
type: String,
value: '',
},
},
data: {
animationData: {},
},
methods: {
closePopup() {
const animation = wx.createAnimation({
duration: 300,
timingFunction: 'ease',
});
animation.opacity(0).step();
this.setData({
animationData: animation.export(),
});
setTimeout(() => {
this.setData({
show: false,
});
}, 300);
},
},
});
/* popup.wxss */
.popup-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 999;
}
.popup {
width: 80%;
max-height: 80%;
margin: 0 auto;
padding: 20rpx;
background-color: #fff;
border-radius: 8rpx;
overflow-y: auto;
text-align: center;
}
.popup-animation {
animation-duration: 0.3s;
animation-timing-function: ease;
animation-fill-mode: forwards;
}
.popup-animation.popup-enter {
opacity: 0;
}
.popup-animation.popup-enter-active {
opacity: 1;
}
.popup-animation.popup-leave {
opacity: 1;
}
.popup-animation.popup-leave-active {
opacity: 0;
}
```
使用方法:
在需要使用 popup 弹窗的页面或组件中引入该组件:
```
<!-- page.wxml -->
<view>
<button bindtap="openPopup">打开弹窗</button>
<popup show="{{showPopup}}" content="这是一个弹窗" />
</view>
// page.js
Page({
data: {
showPopup: false,
},
openPopup() {
const animation = wx.createAnimation({
duration: 300,
timingFunction: 'ease',
});
animation.opacity(1).step();
this.setData({
showPopup: true,
animationData: animation.export(),
});
},
});
```
其中 `showPopup` 是控制弹窗显示与隐藏的状态,可以通过修改 `showPopup` 的值来控制弹窗的显示。在 `openPopup` 方法中,我们创建了一个渐变动画,设置 `showPopup` 和 `animationData` 的值,从而让弹窗显示出来并且有动画效果。当点击弹窗的背景或者关闭按钮时,会触发 `closePopup` 方法,通过创建一个渐变动画来隐藏弹窗并且有动画效果。
阅读全文