<---------------------------------定义组建------------------------------------------------------------------------->
// components/component-tag-name.js
Component({
options: {
multipleSlots: true // 在组件定义时的选项中启用多slot支持
},
/**
* 组件的属性列表
*/
properties: {
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
myActionSheetCancel() {
this.hideMyActionSheet()
},
showMyActionSheet: function () {
// 显示遮罩层
var animation = wx.createAnimation({
duration: 200,
timingFunction: "linear",
delay: 0
})
this.animation = animation
animation.translateY(300).step()
this.setData({
animationData: animation.export(),
showModalStatus: true
})
setTimeout(function () {
animation.translateY(0).step()
this.setData({
animationData: animation.export()
})
}.bind(this), 200)
},
hideMyActionSheet: function () {
// 隐藏遮罩层
var animation = wx.createAnimation({
duration: 200,
timingFunction: "linear",
delay: 0
})
this.animation = animation
animation.translateY(300).step()
this.setData({
animationData: animation.export(),
})
setTimeout(function () {
animation.translateY(0).step()
this.setData({
animationData: animation.export(),
showModalStatus: false
})
}.bind(this), 200)
},
}
})
json
{
"component": true,
"usingComponents": {}
}
wxml
<!-- 组件模板 -->
<view class="wrapper">
<slot name="before"></slot>
<view class="maskLayer" bindtap="hideMyActionSheet" wx:if="{{showModalStatus}}"></view>
<view animation="{{animationData}}" class="actionSheetLayer" wx:if="{{showModalStatus}}">
<slot></slot>
<view class='cancel' bindtap='myActionSheetCancel'> 取消 </view>
</view>
</view>
wxss
/* components/component-tag-name.wxss */
.maskLayer {
100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
background: #000;
opacity: 0.2;
overflow: hidden;
z-index: 1000;
color: #fff;
}
.actionSheetLayer {
100%;
overflow: hidden;
position: fixed;
bottom: 0;
left: 0;
z-index: 2000;
background: #ededed;
}
.play{
100%;
height: 98rpx;
line-height: 98rpx;
text-align: center;
background: #fff;
border-top: 1rpx solid rgba(204, 204, 204, 0.356);
}
.cancel{
100%;
line-height: 98rpx;
height: 98rpx;
text-align: center;
background: #fff;
border-top: 1rpx solid #ededed;
margin-top: 10rpx;
}
<----------------------------------------引用页面------------------------------------------------------------------>
const app = getApp()
Page({
data: {
actionSheetText: ['选项1', '选项2', '选项3']
},
onLoad: function () {
this.myActionSheet = this.selectComponent(".list")
console.log(this);
},
showMyActionSheet() {
console.log('click');
this.myActionSheet.showMyActionSheet()
},
actionSheetIndex(e){
console.log('当前下标:', e.currentTarget.dataset.index)
}
})
JSON
{
"usingComponents": {
"myActionSheet": "/component/components/component-tag-name"
}
}
wxml
<!-- 引用组件的页面模版 -->
<view>
<myActionSheet class='list'>
<view slot="before" bindtap='showMyActionSheet' wx:for='{{5}}'>某图标</view>
<view wx:for='{{actionSheetText}}' class='cancelist' bindtap='actionSheetIndex' data-index='{{index}}'>{{item}}</view>
</myActionSheet>
</view>
wxss
.intro {
margin: 30px;
text-align: center;
}
.cancel{
100%;
line-height: 98rpx;
height: 98rpx;
text-align: center;
background: #fff;
border-top: 1rpx solid #ededed;
margin-top: 10rpx;
}
.cancelist{
100%;
line-height: 98rpx;
height: 98rpx;
text-align: center;
background: #fff;
border-top: 1rpx solid #ededed;
}