Skip to content

Commit

Permalink
Fix/popover (#22)
Browse files Browse the repository at this point in the history
* fix(demo): fix PopoverBase demo style

* fix: fix popover arrow style

* feat: popover add support for mask

Co-authored-by: wyj <wb-wyj631405@antfin.com>
Co-authored-by: Simplyme0823 <57203444+Simplyme0823@users.noreply.github.com>
  • Loading branch information
3 people committed Mar 29, 2022
1 parent e23fa56 commit df34425
Show file tree
Hide file tree
Showing 13 changed files with 87 additions and 22 deletions.
10 changes: 9 additions & 1 deletion demo/pages/Popover/index.acss
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
background-color: #fff;
border: 1px solid #dddddd;
border-radius: 4px;
text-align: center;
}
.demo-popover-btn-2 {
width: 80px;
Expand All @@ -23,7 +24,14 @@
background-color: #fff;
border: 1px solid #dddddd;
border-radius: 4px;
text-align: center;
}
page{
page {
background-color: #f7f7fa;
}
.demo-btn {
position: fixed;
bottom: 10rpx;
width: 40%;
left: 30%;
}
6 changes: 6 additions & 0 deletions demo/pages/Popover/index.axml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<popover
placement="bottom-right"
visible="{{show}}"
mask="{{showMask}}"
onVisibleChange="onVisibleChange">

<view class="demo-popover-btn-1">
Expand Down Expand Up @@ -91,3 +92,8 @@
</block>
</popover>
</view>
<button
class="demo-btn"
onTap="onToggleMask">
{{showMask?'隐藏':'显示'}}蒙层
</button>
13 changes: 11 additions & 2 deletions demo/pages/Popover/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,25 @@
Page({
data: {
show: true,
showMask: false,
url: 'https://gw.alipayobjects.com/mdn/rms_ce4c6f/afts/img/A*XMCgSYx3f50AAAAAAAAAAABkARQnAQ',
},
onVisibleChange(e) {
onVisibleChange(visible, mode) {
this.setData({
show: e,
show: visible,
});
if (mode==='mask') {
my.showToast({content: '点击mask关闭', duration:1000 });
}
},
itemTap(e) {
my.alert({
content: `点击_${e.currentTarget.dataset.index}`,
});
},
onToggleMask(){
this.setData({
showMask: !this.data.showMask,
});
},
});
6 changes: 4 additions & 2 deletions demo/pages/PopoverBase/index.acss
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
width: 45%;
}

.demo-popover-tooltip {
.demo-popover-items {
color: #fff;
text-align: center;
padding: 20rpx;
white-space: nowrap;
font-size: 28rpx;
}
14 changes: 10 additions & 4 deletions demo/pages/PopoverBase/index.axml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@
<popover
placement="{{placement}}"
visible="{{show}}"
mask="{{false}}"
mask="{{showMask}}"
maskClosable="{{true}}"
onVisibleChange="onVisibleChange">

<view class="demo-popover-btn">
点击{{show ? '隐藏' : '显示'}} {{placement}}
</view>

<view slot="items" class="demo-popover-items">
tooltip
</view>

<block slot="items">
<view class="demo-popover-tooltip">tooltip</view>
</block>
</popover>
</view>

Expand All @@ -22,4 +23,9 @@
onTap="onNextPositionTap">
下个位置
</button>
<button
class="demo-btn"
onTap="onToggleMask">
{{showMask?'隐藏':'显示'}}蒙层
</button>
</view>
15 changes: 12 additions & 3 deletions demo/pages/PopoverBase/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,27 @@ Page({
data: {
placement: placement[0],
show: false,
showMask: true,
},
onNextPositionTap() {
let index = placement.indexOf(this.data.placement);
index = index >= placement.length - 1 ? 0 : index + 1;
this.setData({
show: !this.data.show,
show: true,
placement: placement[index],
});
},
onVisibleChange(e) {
onVisibleChange(visible, mode) {
this.setData({
show: e,
show: visible,
});
if (mode==='mask') {
my.showToast({content: '点击mask关闭', duration:1000 });
}
},
onToggleMask(){
this.setData({
showMask: !this.data.showMask,
});
},
});
2 changes: 2 additions & 0 deletions src/Popover/index.axml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
</view>
<view class="amd-popover-container"
a:if="{{visible}}">
<!-- 蒙层 -->
<mask show="{{mask}}" fixMaskFull="{{fixMaskFull}}" maskZindex="{{99}}" onMaskTap="onMaskTap"></mask>
<view class="amd-popover-content amd-popover-{{placement}}">
<view class="amd-popover-arrow {{mode==='light' ? 'amd-popover-arrow-light' : ''}}"></view>
<view class="amd-popover-content-bg">
Expand Down
5 changes: 4 additions & 1 deletion src/Popover/index.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
{
"component": true
"component": true,
"usingComponents": {
"mask": "../Mask/index"
}
}
3 changes: 2 additions & 1 deletion src/Popover/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
&-right-top &-arrow,
&-right-bottom &-arrow {
transform: translateX(-75%) rotate(-90deg);
left: 0;
left: 1 * @rpx;
}
&-right &-arrow {
transform: translate(-75%, -50%) rotate(-90deg);
Expand Down Expand Up @@ -182,6 +182,7 @@
&-left-top &-arrow,
&-left-bottom &-arrow {
transform: translateX(75%) rotate(90deg);
right: 1 * @rpx;
}
&-left &-arrow {
transform: translate(75%, -50%) rotate(90deg);
Expand Down
5 changes: 4 additions & 1 deletion src/Popover/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ toc: false
| mode | `'dark'` &verbar; `'light'` || 'dark' | 组件显示模式 |
| placement | `'top'` &verbar; `'top-right'` &verbar; `'top-left'` &verbar; `'bottom'` &verbar; `'bottom-left'` &verbar; `'bottom-right'` &verbar; `'left'` &verbar; `'left-top'` &verbar; `'left-bottom'` &verbar; `'right'` &verbar; `'right-top'` &verbar; `'right-bottom'` || "bottom-right" | 方向 |
| className | string || - | 类名 |
| mask | boolean || false | 是否展示蒙层 |
| maskClosable | boolean || true | 是否可点击蒙层关闭 |
| fixMaskFull | boolean || false | 用以解决遮罩层受到 transform 影响而显示不全的问题 |

#### PopoverItem
| 属性 | 类型 | 必填 | 默认值 | 说明 |
Expand All @@ -39,7 +42,7 @@ toc: false
#### Popover
| 事件名 | 说明 | 类型 |
| -----|-----|-----|
| onVisibleChange | 组件隐藏/显示切换,触发回调 | ( visible: boolean ) => void |
| onVisibleChange | 组件隐藏/显示切换,触发回调 | ( visible: boolean, mode: 'component' &verbar; 'mask' ) => void |

#### PopoverItem
| 事件名 | 说明 | 类型 |
Expand Down
8 changes: 4 additions & 4 deletions src/Popover/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ Component({
onVisibleChange() {
const { onVisibleChange, visible } = this.props;
if (onVisibleChange) {
return onVisibleChange(!visible);
return onVisibleChange(!visible, 'component');
}
},
onMaskTap() {
const { maskClosable } = this.props;
if (maskClosable) {
this.onVisibleChange();
const { maskClosable, onVisibleChange } = this.props;
if (maskClosable && onVisibleChange) {
onVisibleChange(false, 'mask');
} else {
return false;
}
Expand Down
19 changes: 17 additions & 2 deletions src/Popover/props.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export interface IPopoverProps extends IBaseProps {
/**
* @description visible 变更时回调
*/
onVisibleChange?: (visible: boolean) => void;
onVisibleChange?: (visible: boolean, from: 'component' | 'mask') => void;
/**
* @description 方向
* @default "bottom-right"
Expand All @@ -23,6 +23,21 @@ export interface IPopoverProps extends IBaseProps {
* @description 组件显示模式
* @default dark
*/
mode?: 'dark' | 'light'
mode?: 'dark' | 'light',
/**
* @description 是否展示蒙层
* @default false
*/
mask?: boolean;
/**
* @description 是否可点击蒙层关闭
* @default true
*/
maskClosable?: boolean;
/**
* @description 用以解决遮罩层受到 transform 影响而显示不全的问题
* @default false
*/
fixMaskFull?: boolean;
}
export declare const PopoverDefaultProps: Partial<IPopoverProps>;
3 changes: 2 additions & 1 deletion src/Popover/props.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
export const PopoverDefaultProps = {
visible: false,
mask: false,
maskClosable: false,
maskClosable: true,
placement: 'bottom-right',
mode: 'dark',
fixMaskFull: false,
};

0 comments on commit df34425

Please sign in to comment.