mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-05-22 06:31:45 +08:00
feat(Popover): add animation
This commit is contained in:
parent
6d67093589
commit
acf92e1fea
@ -4,7 +4,7 @@
|
|||||||
<van-popover
|
<van-popover
|
||||||
v-model="show.lightTheme"
|
v-model="show.lightTheme"
|
||||||
:actions="t('actions')"
|
:actions="t('actions')"
|
||||||
placement="bottom"
|
placement="bottom-start"
|
||||||
style="margin-left: 16px;"
|
style="margin-left: 16px;"
|
||||||
>
|
>
|
||||||
<template #reference>
|
<template #reference>
|
||||||
@ -35,7 +35,7 @@
|
|||||||
name="picker"
|
name="picker"
|
||||||
:value="currentPlacement"
|
:value="currentPlacement"
|
||||||
:label="t('choosePlacement')"
|
:label="t('choosePlacement')"
|
||||||
:placeholder="t('placeholder')"
|
:placeholder="t('choosePlacement')"
|
||||||
@click="showPicker = true"
|
@click="showPicker = true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<div class="demo-popover-box">
|
<div class="demo-popover-box">
|
||||||
<van-popover
|
<van-popover
|
||||||
:value="true"
|
v-model="show.placement"
|
||||||
:actions="t('shortActions')"
|
:actions="t('shortActions')"
|
||||||
:placement="currentPlacement"
|
:placement="currentPlacement"
|
||||||
>
|
>
|
||||||
@ -70,7 +70,7 @@
|
|||||||
<van-popover
|
<van-popover
|
||||||
v-model="show.showIcon"
|
v-model="show.showIcon"
|
||||||
:actions="t('actionsWithIcon')"
|
:actions="t('actionsWithIcon')"
|
||||||
placement="top"
|
placement="top-start"
|
||||||
style="margin-left: 16px;"
|
style="margin-left: 16px;"
|
||||||
>
|
>
|
||||||
<template #reference>
|
<template #reference>
|
||||||
@ -157,7 +157,7 @@ export default {
|
|||||||
lightTheme: false,
|
lightTheme: false,
|
||||||
},
|
},
|
||||||
showPicker: false,
|
showPicker: false,
|
||||||
currentPlacement: 'top',
|
currentPlacement: '',
|
||||||
placements: [
|
placements: [
|
||||||
'top',
|
'top',
|
||||||
'top-start',
|
'top-start',
|
||||||
@ -179,6 +179,10 @@ export default {
|
|||||||
onConfirm(value) {
|
onConfirm(value) {
|
||||||
this.showPicker = false;
|
this.showPicker = false;
|
||||||
this.currentPlacement = value;
|
this.currentPlacement = value;
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.show.placement = true;
|
||||||
|
}, 300);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -48,12 +48,6 @@ export default createComponent({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
location: null,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
placement: 'updateLocation',
|
placement: 'updateLocation',
|
||||||
|
|
||||||
@ -86,6 +80,7 @@ export default createComponent({
|
|||||||
name: 'computeStyles',
|
name: 'computeStyles',
|
||||||
options: {
|
options: {
|
||||||
adaptive: false,
|
adaptive: false,
|
||||||
|
gpuAcceleration: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -100,6 +95,10 @@ export default createComponent({
|
|||||||
|
|
||||||
updateLocation() {
|
updateLocation() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
if (!this.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.popper) {
|
if (!this.popper) {
|
||||||
this.popper = this.createPopper();
|
this.popper = this.createPopper();
|
||||||
} else {
|
} else {
|
||||||
@ -114,7 +113,7 @@ export default createComponent({
|
|||||||
const { icon, text, disabled, className } = action;
|
const { icon, text, disabled, className } = action;
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
class={[bem('action', { disabled }), className]}
|
class={[bem('action', { disabled, 'with-icon': icon }), className]}
|
||||||
onClick={() => this.onClickAction(action, index)}
|
onClick={() => this.onClickAction(action, index)}
|
||||||
>
|
>
|
||||||
{icon && <Icon name={icon} class={bem('action-icon')} />}
|
{icon && <Icon name={icon} class={bem('action-icon')} />}
|
||||||
@ -171,7 +170,6 @@ export default createComponent({
|
|||||||
<Popup
|
<Popup
|
||||||
ref="popover"
|
ref="popover"
|
||||||
value={this.value}
|
value={this.value}
|
||||||
style={this.location}
|
|
||||||
class={bem([this.theme])}
|
class={bem([this.theme])}
|
||||||
overlay={this.overlay}
|
overlay={this.overlay}
|
||||||
position={null}
|
position={null}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
border-radius: @border-radius-lg;
|
border-radius: @border-radius-lg;
|
||||||
transition-duration: 0s;
|
transition: opacity 0.15s, transform 0.15s;
|
||||||
|
|
||||||
&__wrapper {
|
&__wrapper {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -46,7 +46,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-icon {
|
&-icon {
|
||||||
font-size: 16px;
|
margin-right: @padding-xs;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&--with-icon {
|
||||||
|
.van-popover__action-text {
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,18 +67,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='top'] {
|
&[data-popper-placement='top'] {
|
||||||
|
transform-origin: 50% 100%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='top-start'] {
|
&[data-popper-placement='top-start'] {
|
||||||
|
transform-origin: 0 100%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
left: @padding-md;
|
left: @padding-md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='top-end'] {
|
&[data-popper-placement='top-end'] {
|
||||||
|
transform-origin: 100% 100%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
right: @padding-md;
|
right: @padding-md;
|
||||||
}
|
}
|
||||||
@ -87,18 +100,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='left'] {
|
&[data-popper-placement='left'] {
|
||||||
|
transform-origin: 100% 50%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
top: 50%;
|
top: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='left-start'] {
|
&[data-popper-placement='left-start'] {
|
||||||
|
transform-origin: 100% 0;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
top: @padding-md;
|
top: @padding-md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='left-end'] {
|
&[data-popper-placement='left-end'] {
|
||||||
|
transform-origin: 100% 100%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
bottom: @padding-md;
|
bottom: @padding-md;
|
||||||
}
|
}
|
||||||
@ -114,18 +133,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='right'] {
|
&[data-popper-placement='right'] {
|
||||||
|
transform-origin: 0 50%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
top: 50%;
|
top: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='right-start'] {
|
&[data-popper-placement='right-start'] {
|
||||||
|
transform-origin: 0 0;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
top: @padding-md;
|
top: @padding-md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='right-end'] {
|
&[data-popper-placement='right-end'] {
|
||||||
|
transform-origin: 0 100%;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
bottom: @padding-md;
|
bottom: @padding-md;
|
||||||
}
|
}
|
||||||
@ -141,18 +166,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='bottom'] {
|
&[data-popper-placement='bottom'] {
|
||||||
|
transform-origin: 50% 0;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='bottom-start'] {
|
&[data-popper-placement='bottom-start'] {
|
||||||
|
transform-origin: 0 0;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
left: @padding-md;
|
left: @padding-md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-popper-placement='bottom-end'] {
|
&[data-popper-placement='bottom-end'] {
|
||||||
|
transform-origin: 100% 0;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
right: @padding-md;
|
right: @padding-md;
|
||||||
}
|
}
|
||||||
@ -187,7 +218,7 @@
|
|||||||
background-color: #4a4a4a;
|
background-color: #4a4a4a;
|
||||||
|
|
||||||
.van-popover__arrow {
|
.van-popover__arrow {
|
||||||
color: @gray-8;
|
color: #4a4a4a;
|
||||||
}
|
}
|
||||||
|
|
||||||
.van-popover__action {
|
.van-popover__action {
|
||||||
@ -196,7 +227,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&--disabled {
|
&--disabled {
|
||||||
color: @gray-7;
|
color: @gray-6;
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
@ -211,10 +242,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// &-zoom-enter,
|
&-zoom-enter,
|
||||||
// &-zoom-leave-active {
|
&-zoom-leave-active {
|
||||||
// transform: scale(0.8);
|
transform: scale(0.8);
|
||||||
// opacity: 0;
|
opacity: 0;
|
||||||
// transition: all 0.3s;
|
}
|
||||||
// }
|
|
||||||
|
&-zoom-enter-active {
|
||||||
|
transition-timing-function: @animation-timing-function-enter;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-zoom-leave-active {
|
||||||
|
transition-timing-function: @animation-timing-function-leave;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user