diff --git a/src/components/modal/__snapshots__/index.test.js.snap b/src/components/modal/__snapshots__/index.test.js.snap
index 9411696bd..3ef2c3905 100644
--- a/src/components/modal/__snapshots__/index.test.js.snap
+++ b/src/components/modal/__snapshots__/index.test.js.snap
@@ -6,6 +6,12 @@ exports[`Modal Snap render opened Modal -- simple 1`] = `"
这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`;
+exports[`Modal Snap render opened Modal -- popup 1`] = `""`;
+
+exports[`Modal Snap render opened Modal -- popup animationType 1`] = `""`;
+
+exports[`Modal Snap render opened Modal -- simple 1`] = `""`;
+
exports[`Modal Snap render opened Modal -- single button 1`] = `"这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`;
exports[`Modal Snap render opened Modal 1`] = `"这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室 这里是正文内容,欢迎加入京东凹凸实验室
"`;
diff --git a/src/components/modal/index.js b/src/components/modal/index.js
index 9552ccf42..abf00c2d8 100644
--- a/src/components/modal/index.js
+++ b/src/components/modal/index.js
@@ -71,7 +71,7 @@ export default class AtModal extends AtComponent {
render () {
const { _isOpened } = this.state
- const { title, content, cancelText, confirmText } = this.props
+ const { title, content, cancelText, confirmText, popup, animationType } = this.props
const rootClass = classNames(
'at-modal',
@@ -81,6 +81,21 @@ export default class AtModal extends AtComponent {
this.props.className
)
+ let isPopUp = false
+
+ if (popup) {
+ isPopUp = true
+ // eslint-disable-next-line no-unused-expressions
+ animationType === 'slide-up' ? 'slide-up' : 'slide-down'
+ }
+ const popUpClass = classNames(
+ {
+ 'at-modal__container': !isPopUp,
+ 'at-modal__popup': isPopUp,
+ [`at-modal__popup-${animationType}`]: isPopUp && animationType
+ }
+ )
+
if (title || content) {
const isRenderAction = cancelText || confirmText
return (
@@ -89,7 +104,7 @@ export default class AtModal extends AtComponent {
onClick={this.handleClickOverlay}
className='at-modal__overlay'
/>
-
+
{title && (
{title}
@@ -120,7 +135,7 @@ export default class AtModal extends AtComponent {
return (
- {this.props.children}
+ {this.props.children}
)
}
diff --git a/src/components/modal/index.test.js b/src/components/modal/index.test.js
index 4c629ef55..a1993522c 100644
--- a/src/components/modal/index.test.js
+++ b/src/components/modal/index.test.js
@@ -91,6 +91,33 @@ describe('Modal Snap', () => {
)
expect(component).toMatchSnapshot()
})
+
+ it('render opened Modal -- popup', () => {
+ const component = renderToString(
+
+ )
+ expect(component).toMatchSnapshot()
+ })
+
+ it('render opened Modal -- popup animationType', () => {
+ const component = renderToString(
+
+ )
+ expect(component).toMatchSnapshot()
+ })
})
describe('Modal Behavior ', () => {
diff --git a/src/pages/action/modal/index.js b/src/pages/action/modal/index.js
index b4257f980..457eb4d87 100644
--- a/src/pages/action/modal/index.js
+++ b/src/pages/action/modal/index.js
@@ -1,5 +1,5 @@
import Taro from '@tarojs/taro'
-import { View, Button } from '@tarojs/components'
+import { View, Button, Text, Input } from '@tarojs/components'
import {
AtButton,
AtModal,
@@ -27,7 +27,8 @@ export default class ModalPage extends Taro.Component {
isOpened2: false,
isOpened3: false,
isOpened4: false,
- isOpened5: false
+ isOpened5: false,
+ isOpened6: false
}
}
@@ -61,7 +62,7 @@ export default class ModalPage extends Taro.Component {
}
render () {
- const { isOpened1, isOpened2, isOpened3, isOpened4, isOpened5 } = this.state
+ const { isOpened1, isOpened2, isOpened3, isOpened4, isOpened5, isOpened6 } = this.state
return (
@@ -116,6 +117,17 @@ export default class ModalPage extends Taro.Component {
+
+ 打开popup
+
+
+
+ 打开popup
+
+
+
+
+
{/* 城市索引 */}
城市索引
@@ -204,6 +216,36 @@ export default class ModalPage extends Taro.Component {
onConfirm={this.closeModalConfirm.bind(this, 4, '点击了确认')}
/>
+ {/* Popup */}
+
+ 完善信息
+
+
+ 姓名:
+
+
+
+ 呢称:
+
+
+
+
+
+
+
+
+
diff --git a/src/style/components/modal.scss b/src/style/components/modal.scss
index 0d595cf87..5acfeec7f 100644
--- a/src/style/components/modal.scss
+++ b/src/style/components/modal.scss
@@ -33,6 +33,22 @@ $at-modal-duration: 200ms;
overflow: hidden;
}
+ &__popup {
+ position: absolute;
+ width: 100%;
+ background: #fff;
+
+ &-slide-down {
+ top: 0;
+ }
+
+ &-slide-up {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ }
+ }
+
&__header {
@include hairline-bottom-relative($color: $color-grey-4);
@include line(1);