diff --git a/example/pages/popup/index.js b/example/pages/popup/index.js index 3094c023..664139bd 100644 --- a/example/pages/popup/index.js +++ b/example/pages/popup/index.js @@ -1,40 +1,40 @@ Page({ - data: { - showPopup: false, - showLeftPopup: false, - showRightPopup: false, - showTopPopup: false, - showBottomPopup: false + show: { + middle: false, + top: false, + bottom: false, + right: false, + right2: false + } + }, + + toggle(type) { + this.setData({ + [`show.${type}`]: !this.data.show[type] + }); }, togglePopup() { - this.setData({ - showPopup: !this.data.showPopup - }); - }, - - toggleLeftPopup() { - this.setData({ - showLeftPopup: !this.data.showLeftPopup - }); + this.toggle('middle'); }, toggleRightPopup() { - this.setData({ - showRightPopup: !this.data.showRightPopup - }); + this.toggle('right'); + }, + + toggleRightPopup2() { + this.toggle('right2'); }, toggleBottomPopup() { - this.setData({ - showBottomPopup: !this.data.showBottomPopup - }); + this.toggle('bottom'); }, toggleTopPopup() { - this.setData({ - showTopPopup: !this.data.showTopPopup - }); + this.toggle('top'); + setTimeout(() => { + this.toggle('top'); + }, 2000); } }); diff --git a/example/pages/popup/index.json b/example/pages/popup/index.json index b1f3aa4c..057f0097 100644 --- a/example/pages/popup/index.json +++ b/example/pages/popup/index.json @@ -1,8 +1,8 @@ { "navigationBarTitleText": "Popup 弹出层", "usingComponents": { + "demo-block": "../../components/demo-block/index", "van-popup": "../../dist/popup/index", "van-button": "../../dist/button/index" } } - diff --git a/example/pages/popup/index.wxml b/example/pages/popup/index.wxml index 7f057b42..fc5812d9 100644 --- a/example/pages/popup/index.wxml +++ b/example/pages/popup/index.wxml @@ -1,84 +1,54 @@ - - 弹出popup - - - 从顶部弹出popup - - - 从底部弹出popup - - - 从左边弹出popup - - - 从右边弹出popup - + + 弹出 Popup + + 内容 + + - - - - - - - - + + 底部弹出 - - - - - - - - + + 内容 + - - - - - - - - + 顶部弹出 + + 内容 + - - - 内容 - + 右侧弹出 + + 关闭弹层 - - - - - - - - + 右侧弹出 + + 关闭弹层 + + + diff --git a/example/pages/popup/index.wxss b/example/pages/popup/index.wxss index 06ec830f..cb419fa3 100644 --- a/example/pages/popup/index.wxss +++ b/example/pages/popup/index.wxss @@ -1,21 +1,32 @@ -.pop-example--top { - width: 100vw; - padding: 15px; - background: rgba(0, 0, 0, 0.7); - color: #fff; - font-size: 12px; +:host { + font-size: 16px; +} + +.center { + width: 60%; + padding: 20px; text-align: center; + box-sizing: border-box; } -.pop-example__container { - overflow: hidden; - background: #fff; +.top { + color: #fff; + width: 100%; + padding: 20px; + border-radius: 0; + line-height: 20px; + background-color: rgba(0, 0, 0, 0.8)!important; } -.pop-example__container--bottom { - width: 100vw; +.bottom { + width: 100%; + padding: 20px; + line-height: 100px; + background-color: #fff; } -.pop-example__container--left, .pop-example__container--right { - height: 100vh; +.right { + width: 100%; + height: 100%; + padding: 20px; } diff --git a/packages/popup/README.md b/packages/popup/README.md index 296614c3..452abfcd 100644 --- a/packages/popup/README.md +++ b/packages/popup/README.md @@ -3,62 +3,65 @@ ### 使用指南 在 index.json 中引入组件 ```json -{ - "usingComponents": { - "van-popup": "path/to/vant-weapp/dist/popup/index" - } +"usingComponents": { + "van-popup": "path/to/vant-weapp/dist/popup/index" } ``` - ### 代码演示 -可以在页面任意位置上使用 van-popup 标签。通过 show 可以控制弹窗是否展示 -```html - -``` -#### popup 动画 -popup 额外支持了 上下左右 四种动画方式,通过增加 type 属性即可控制。使用方式如下 -```html - - - - - - - - - - -``` - -#### 控制显示,隐藏 +#### 基础用法 +`popup`默认从中间弹出 ```html - +内容 ``` -```js -data: { - isShow: false -}, -togglePopup() { - this.setData({ - isShow: !this.data.isShow - }); -} +```javascript +Page({ + data: { + show: false + }, + + onClose() { + this.setData({ show: false }); + } +}); ``` -### 具体参数和事件 -#### 参数说明 -| 参数 | 说明 | 类型 | 默认值 | 必须 | -|-----------|-----------|-----------|-------------|-------------| -| show | 是否显示弹出层 | Boolean | false | | -| overlay | 是否显示遮罩层 | Boolean | true | | -| closeOnClickOverlay | 遮罩层点击时,是否触发关闭事件 | Boolean | true | | -| type | 弹出层动画方式, 可选`center`, `left`, `right`, `top`, `bottom` | String | center | | +#### 弹出位置 +通过`position`属性设置 Popup 弹出位置 -#### 事件说明 -| 事件名 | 说明 | 参数 | +```html + + 内容 + +``` + +### API + +| 参数 | 说明 | 类型 | 默认值 | +|-----------|-----------|-----------|-------------| +| show | 当前组件是否显示 | `Boolean` | `false` | +| overlay | 是否显示背景蒙层 | `Boolean` | `true` | +| position | 可选值为 `top` `bottom` `right` `left` | `String` | - | +| overlay-style | 自定义蒙层样式 | `Object` | `` | +| close-on-click-overlay | 点击蒙层是否关闭 Popup | `Boolean` | `true` | + +### Event + +| 事件名 | 说明 | 参数 | |-----------|-----------|-----------| -| click-overlay | 遮罩层点击触发 | | -| close | 遮罩层关闭时触发 | | +| click-overlay | 点击蒙层时触发 | - | +| close | 蒙层关闭时触发 | - | + +### 外部样式类 + +| 类名 | 说明 | +|-----------|-----------| +| custom-class | 根节点样式类 | +| overlay-class | 蒙层样式类 | diff --git a/packages/popup/index.js b/packages/popup/index.js index 71bb69f4..9001d6d3 100644 --- a/packages/popup/index.js +++ b/packages/popup/index.js @@ -1,35 +1,33 @@ Component({ - properties: { - show: { - type: Boolean, - value: false - }, + externalClasses: [ + 'custom-class', + 'overlay-class' + ], + properties: { + show: Boolean, + overlayStyle: String, overlay: { type: Boolean, value: true }, - closeOnClickOverlay: { type: Boolean, value: true }, - - // 弹出方向 - type: { + position: { type: String, value: 'center' } }, methods: { - handleMaskClick() { - this.triggerEvent('click-overlay', {}); + onClickOverlay() { + this.triggerEvent('click-overlay'); - if (!this.data.closeOnClickOverlay) { - return; + if (this.data.closeOnClickOverlay) { + this.triggerEvent('close'); } - this.triggerEvent('close', {}); } } }); diff --git a/packages/popup/index.json b/packages/popup/index.json index 58663aee..467ce294 100644 --- a/packages/popup/index.json +++ b/packages/popup/index.json @@ -1,6 +1,3 @@ { - "component": true, - "usingComponents": { - "pop-manager": "../common/pop-manager/index" - } + "component": true } diff --git a/packages/popup/index.pcss b/packages/popup/index.pcss new file mode 100644 index 00000000..0c18b8a8 --- /dev/null +++ b/packages/popup/index.pcss @@ -0,0 +1,95 @@ +@import '../common/index.pcss'; + +.van-popup { + top: 50%; + left: 50%; + z-index: 11; + max-height: 100%; + overflow-y: auto; + box-sizing: border-box; + background-color: $white; + -webkit-overflow-scrolling: touch; + transform: translate3d(-50%, -50%, 0); + + &, + &__overlay { + display: none; + position: fixed; + animation: van-fade-in .3s ease; + } + + &__overlay { + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.7); + } + + &--top { + width: 100%; + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translate3d(-50%, 0, 0); + animation-name: van-popup-top; + } + + &--right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translate3d(0, -50%, 0); + animation-name: van-popup-right; + } + + &--bottom { + width: 100%; + top: auto; + bottom: 0; + right: auto; + left: 50%; + transform: translate3d(-50%, 0, 0); + animation-name: van-popup-bottom; + } + + &--left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translate3d(0, -50%, 0); + animation-name: van-popup-left; + } + + &--show { + display: block; + } +} + +@keyframes van-popup-top { + from { + transform: translate3d(-50%, -100%, 0); + } +} + +@keyframes van-popup-bottom { + from { + transform: translate3d(-50%, 100%, 0); + } +} + +@keyframes van-popup-left { + from { + transform: translate3d(-100%, -50%, 0); + } +} + +@keyframes van-popup-right { + from { + transform: translate3d(100%, -50%, 0); + } +} \ No newline at end of file diff --git a/packages/popup/index.wxml b/packages/popup/index.wxml index 6451fc6f..daf74aa9 100644 --- a/packages/popup/index.wxml +++ b/packages/popup/index.wxml @@ -1,8 +1,9 @@ - - - + + + +