Commit ab58648e93bafc754bf9601079ae4f7fc2e52abb
1 parent
1416321b
update Drawer
Showing
4 changed files
with
295 additions
and
69 deletions
Show diff stats
examples/routers/drawer.vue
| 1 | 1 | <template> |
| 2 | - <Row :gutter="16"> | |
| 3 | - <i-col span="12"> | |
| 4 | - <Card title="horizontal divider"> | |
| 5 | - <div> | |
| 6 | - <p> | |
| 7 | - iView is a set of UI components and widgets built on Vue.js. | |
| 8 | - iView is a set of UI components and widgets built on Vue.js. | |
| 9 | - iView is a set of UI components and widgets built on Vue.js. | |
| 10 | - </p> | |
| 2 | + <div> | |
| 3 | + <Button @click="visible = true">show1</Button> | |
| 4 | + <Button @click="visible2 = true">show2</Button> | |
| 5 | + <Button @click="visible3 = true">show3</Button> | |
| 6 | + <Drawer v-model="visible" title="抽屉标题" :styles="styles" width="520"> | |
| 7 | + <p>一些内容</p> | |
| 8 | + <p>一些内容</p> | |
| 9 | + <p>一些内容</p> | |
| 10 | + <Button @click="visible2 = true">show2</Button> | |
| 11 | + <p>一些内容</p> | |
| 12 | + <p>一些内容</p> | |
| 13 | + <p>一些内容</p> | |
| 14 | + <p>一些内容</p> | |
| 15 | + <p>一些内容</p> | |
| 16 | + <p>一些内容</p> | |
| 17 | + <p>一些内容</p> | |
| 18 | + <p>一些内容</p> | |
| 19 | + <p>一些内容</p> | |
| 20 | + <p>一些内容</p> | |
| 21 | + <p>一些内容</p> | |
| 22 | + <p>一些内容</p> | |
| 23 | + <p>一些内容</p> | |
| 24 | + <p>一些内容</p> | |
| 25 | + <p>一些内容</p> | |
| 26 | + <p>一些内容</p> | |
| 27 | + <p>一些内容</p> | |
| 28 | + <p>一些内容</p> | |
| 29 | + <p>一些内容</p> | |
| 30 | + <p>一些内容</p> | |
| 31 | + <p>一些内容</p> | |
| 32 | + <p>一些内容</p> | |
| 33 | + <p>一些内容</p> | |
| 34 | + <p>一些内容</p> | |
| 35 | + <p>一些内容</p> | |
| 36 | + <p>一些内容</p> | |
| 37 | + <p>一些内容</p> | |
| 38 | + <p>一些内容</p> | |
| 39 | + <p>一些内容</p> | |
| 40 | + <p>一些内容</p> | |
| 41 | + <p>一些内容</p> | |
| 42 | + <p>一些内容</p> | |
| 43 | + <p>一些内容</p> | |
| 44 | + <p>一些内容</p> | |
| 45 | + <p>一些内容</p> | |
| 46 | + <p>一些内容</p> | |
| 47 | + <p>一些内容</p> | |
| 48 | + <p>一些内容</p> | |
| 49 | + <p>一些内容</p> | |
| 50 | + <p>一些内容</p> | |
| 51 | + <p>一些内容</p> | |
| 52 | + <p>一些内容</p> | |
| 53 | + <p>一些内容</p> | |
| 54 | + <p>一些内容</p> | |
| 55 | + <p>一些内容</p> | |
| 56 | + <p>一些内容</p> | |
| 57 | + <p>一些内容</p> | |
| 58 | + <p>一些内容</p> | |
| 59 | + <p>一些内容</p> | |
| 60 | + <p>一些内容</p> | |
| 61 | + <p>一些内容</p> | |
| 62 | + </Drawer> | |
| 11 | 63 | |
| 12 | - <Divider/> | |
| 13 | - | |
| 14 | - <p> | |
| 15 | - iView is a set of UI components and widgets built on Vue.js. | |
| 16 | - iView is a set of UI components and widgets built on Vue.js. | |
| 17 | - iView is a set of UI components and widgets built on Vue.js. | |
| 18 | - </p> | |
| 19 | - | |
| 20 | - <Divider>iView </Divider> | |
| 21 | - | |
| 22 | - <p> | |
| 23 | - iView is a set of UI components and widgets built on Vue.js. | |
| 24 | - iView is a set of UI components and widgets built on Vue.js. | |
| 25 | - iView is a set of UI components and widgets built on Vue.js. | |
| 26 | - </p> | |
| 27 | - | |
| 28 | - <Divider dashed/> | |
| 29 | - | |
| 30 | - <p> | |
| 31 | - iView is a set of UI components and widgets built on Vue.js. | |
| 32 | - iView is a set of UI components and widgets built on Vue.js. | |
| 33 | - iView is a set of UI components and widgets built on Vue.js. | |
| 34 | - </p> | |
| 35 | - | |
| 36 | - <Divider orientation="left">iView</Divider> | |
| 37 | - | |
| 38 | - <p> | |
| 39 | - iView is a set of UI components and widgets built on Vue.js. | |
| 40 | - iView is a set of UI components and widgets built on Vue.js. | |
| 41 | - iView is a set of UI components and widgets built on Vue.js. | |
| 42 | - </p> | |
| 43 | - | |
| 44 | - <Divider orientation="right">iView</Divider> | |
| 45 | - | |
| 46 | - <p> | |
| 47 | - iView is a set of UI components and widgets built on Vue.js. | |
| 48 | - iView is a set of UI components and widgets built on Vue.js. | |
| 49 | - iView is a set of UI components and widgets built on Vue.js. | |
| 50 | - </p> | |
| 51 | - | |
| 52 | - </div> | |
| 53 | - </Card> | |
| 54 | - </i-col> | |
| 55 | - <i-col span="12"> | |
| 56 | - <Card title="vertical divider"> | |
| 57 | - <div> | |
| 58 | - iView | |
| 59 | - <Divider type="vertical" /> | |
| 60 | - <a href="#">Components</a> | |
| 61 | - <Divider type="vertical" /> | |
| 62 | - <a href="#">Divider</a> | |
| 63 | - </div> | |
| 64 | - </Card> | |
| 65 | - </i-col> | |
| 66 | - </Row> | |
| 64 | + <Drawer v-model="visible2" title="抽屉标题" placement="right"> | |
| 65 | + <p>一些内容</p> | |
| 66 | + <p>一些内容</p> | |
| 67 | + <p>一些内容</p> | |
| 68 | + <p>一些内容</p> | |
| 69 | + <p>一些内容</p> | |
| 70 | + <p>一些内容</p> | |
| 71 | + <p>一些内容</p> | |
| 72 | + <p>一些内容</p> | |
| 73 | + <p>一些内容</p> | |
| 74 | + <p>一些内容</p> | |
| 75 | + <p>一些内容</p> | |
| 76 | + <p>一些内容</p> | |
| 77 | + <p>一些内容</p> | |
| 78 | + <p>一些内容</p> | |
| 79 | + <p>一些内容</p> | |
| 80 | + <p>一些内容</p> | |
| 81 | + <p>一些内容</p> | |
| 82 | + <p>一些内容</p> | |
| 83 | + <p>一些内容</p> | |
| 84 | + <p>一些内容</p> | |
| 85 | + <p>一些内容</p> | |
| 86 | + <p>一些内容</p> | |
| 87 | + <p>一些内容</p> | |
| 88 | + <p>一些内容</p> | |
| 89 | + <p>一些内容</p> | |
| 90 | + <p>一些内容</p> | |
| 91 | + <p>一些内容</p> | |
| 92 | + <p>一些内容</p> | |
| 93 | + <p>一些内容</p> | |
| 94 | + <p>一些内容</p> | |
| 95 | + <p>一些内容</p> | |
| 96 | + <p>一些内容</p> | |
| 97 | + <p>一些内容</p> | |
| 98 | + <p>一些内容</p> | |
| 99 | + <p>一些内容</p> | |
| 100 | + <p>一些内容</p> | |
| 101 | + <p>一些内容</p> | |
| 102 | + <p>一些内容</p> | |
| 103 | + <p>一些内容</p> | |
| 104 | + <p>一些内容</p> | |
| 105 | + <p>一些内容</p> | |
| 106 | + <p>一些内容</p> | |
| 107 | + <p>一些内容</p> | |
| 108 | + <p>一些内容</p> | |
| 109 | + <p>一些内容</p> | |
| 110 | + <p>一些内容</p> | |
| 111 | + <p>一些内容</p> | |
| 112 | + <p>一些内容</p> | |
| 113 | + <p>一些内容</p> | |
| 114 | + <p>一些内容</p> | |
| 115 | + <p>一些内容</p> | |
| 116 | + <p>一些内容</p> | |
| 117 | + <p>一些内容</p> | |
| 118 | + <p>一些内容</p> | |
| 119 | + <p>一些内容</p> | |
| 120 | + <p>一些内容</p> | |
| 121 | + <p>一些内容22</p> | |
| 122 | + </Drawer> | |
| 123 | + <Drawer v-model="visible3" placement="left"> | |
| 124 | + <p>一些内容</p> | |
| 125 | + <p>一些内容</p> | |
| 126 | + <p>一些内容</p> | |
| 127 | + <p>一些内容</p> | |
| 128 | + <p>一些内容</p> | |
| 129 | + <p>一些内容</p> | |
| 130 | + <p>一些内容</p> | |
| 131 | + <p>一些内容</p> | |
| 132 | + <p>一些内容</p> | |
| 133 | + <p>一些内容</p> | |
| 134 | + <p>一些内容</p> | |
| 135 | + <p>一些内容</p> | |
| 136 | + <p>一些内容</p> | |
| 137 | + <p>一些内容</p> | |
| 138 | + <p>一些内容</p> | |
| 139 | + <p>一些内容</p> | |
| 140 | + <p>一些内容</p> | |
| 141 | + <p>一些内容</p> | |
| 142 | + <p>一些内容</p> | |
| 143 | + <p>一些内容</p> | |
| 144 | + <p>一些内容</p> | |
| 145 | + <p>一些内容</p> | |
| 146 | + <p>一些内容</p> | |
| 147 | + <p>一些内容</p> | |
| 148 | + <p>一些内容</p> | |
| 149 | + <p>一些内容</p> | |
| 150 | + <p>一些内容</p> | |
| 151 | + <p>一些内容</p> | |
| 152 | + <p>一些内容</p> | |
| 153 | + <p>一些内容</p> | |
| 154 | + <p>一些内容</p> | |
| 155 | + <p>一些内容</p> | |
| 156 | + <p>一些内容</p> | |
| 157 | + <p>一些内容</p> | |
| 158 | + <p>一些内容</p> | |
| 159 | + <p>一些内容</p> | |
| 160 | + <p>一些内容</p> | |
| 161 | + <p>一些内容</p> | |
| 162 | + <p>一些内容</p> | |
| 163 | + <p>一些内容</p> | |
| 164 | + <p>一些内容</p> | |
| 165 | + <p>一些内容</p> | |
| 166 | + <p>一些内容</p> | |
| 167 | + <p>一些内容</p> | |
| 168 | + <p>一些内容</p> | |
| 169 | + <p>一些内容</p> | |
| 170 | + <p>一些内容</p> | |
| 171 | + <p>一些内容</p> | |
| 172 | + <p>一些内容</p> | |
| 173 | + <p>一些内容</p> | |
| 174 | + <p>一些内容</p> | |
| 175 | + <p>一些内容</p> | |
| 176 | + <p>一些内容</p> | |
| 177 | + <p>一些内容</p> | |
| 178 | + <p>一些内容</p> | |
| 179 | + <p>一些内容</p> | |
| 180 | + <p>一些内容22</p> | |
| 181 | + </Drawer> | |
| 182 | + </div> | |
| 67 | 183 | </template> |
| 68 | 184 | |
| 69 | 185 | <script> |
| 70 | - export default {} | |
| 186 | + export default { | |
| 187 | + data () { | |
| 188 | + return { | |
| 189 | + visible: false, | |
| 190 | + visible2: false, | |
| 191 | + visible3: false, | |
| 192 | + styles: { | |
| 193 | + height: 'calc(100% - 55px)', | |
| 194 | + paddingBottom: '53px', | |
| 195 | + }, | |
| 196 | + ms: { | |
| 197 | + backgroundColor: 'rgba(255,0,255,0.5)' | |
| 198 | + } | |
| 199 | + }; | |
| 200 | + } | |
| 201 | + }; | |
| 71 | 202 | </script> |
| 72 | 203 | |
| 73 | 204 | <style> |
| 74 | - | |
| 205 | +body{ | |
| 206 | + height: 2000px; | |
| 207 | +} | |
| 75 | 208 | </style> | ... | ... |
src/components/drawer/drawer.vue
| ... | ... | @@ -4,8 +4,8 @@ |
| 4 | 4 | <div class="ivu-drawer-mask" :style="maskStyle" v-show="visible" v-if="mask" @click="handleMask"></div> |
| 5 | 5 | </transition> |
| 6 | 6 | <div :class="wrapClasses" @click="handleWrapClick"> |
| 7 | - <transition name="fade"> | |
| 8 | - <div class="ivu-drawer" :style="mainStyles" v-show="visible"> | |
| 7 | + <transition :name="'move-' + placement"> | |
| 8 | + <div :class="classes" :style="mainStyles" v-show="visible"> | |
| 9 | 9 | <div :class="contentClasses" ref="content"> |
| 10 | 10 | <a class="ivu-drawer-close" v-if="closable" @click="close"> |
| 11 | 11 | <slot name="close"> |
| ... | ... | @@ -24,13 +24,14 @@ |
| 24 | 24 | import Icon from '../icon'; |
| 25 | 25 | import { oneOf } from '../../utils/assist'; |
| 26 | 26 | import TransferDom from '../../directives/transfer-dom'; |
| 27 | + import Emitter from '../../mixins/emitter'; | |
| 27 | 28 | import ScrollbarMixins from '../modal/mixins-scrollbar'; |
| 28 | 29 | |
| 29 | 30 | const prefixCls = 'ivu-drawer'; |
| 30 | 31 | |
| 31 | 32 | export default { |
| 32 | 33 | name: 'Drawer', |
| 33 | - mixins: [ ScrollbarMixins ], | |
| 34 | + mixins: [ Emitter, ScrollbarMixins ], | |
| 34 | 35 | components: { Icon }, |
| 35 | 36 | directives: { TransferDom }, |
| 36 | 37 | props: { |
| ... | ... | @@ -60,6 +61,9 @@ |
| 60 | 61 | maskStyle: { |
| 61 | 62 | type: Object |
| 62 | 63 | }, |
| 64 | + styles: { | |
| 65 | + type: Object | |
| 66 | + }, | |
| 63 | 67 | scrollable: { |
| 64 | 68 | type: Boolean, |
| 65 | 69 | default: false |
| ... | ... | @@ -124,6 +128,15 @@ |
| 124 | 128 | } |
| 125 | 129 | ]; |
| 126 | 130 | }, |
| 131 | + classes () { | |
| 132 | + return [ | |
| 133 | + `${prefixCls}`, | |
| 134 | + `${prefixCls}-${this.placement}`, | |
| 135 | + { | |
| 136 | + [`${prefixCls}-no-header`]: !this.showHead, | |
| 137 | + } | |
| 138 | + ]; | |
| 139 | + } | |
| 127 | 140 | }, |
| 128 | 141 | methods: { |
| 129 | 142 | close () { | ... | ... |
src/styles/components/drawer.less
| 1 | 1 | @drawer-prefix-cls: ~"@{css-prefix}drawer"; |
| 2 | 2 | |
| 3 | 3 | .@{drawer-prefix-cls} { |
| 4 | + width: auto; | |
| 5 | + height: 100%; | |
| 6 | + position: fixed; | |
| 7 | + top: 0; | |
| 4 | 8 | |
| 9 | + &-left{ | |
| 10 | + left: 0; | |
| 11 | + } | |
| 12 | + &-right{ | |
| 13 | + right: 0; | |
| 14 | + } | |
| 15 | + | |
| 16 | + &-hidden { | |
| 17 | + display: none !important; | |
| 18 | + } | |
| 19 | + | |
| 20 | + &-wrap { | |
| 21 | + position: fixed; | |
| 22 | + overflow: auto; | |
| 23 | + top: 0; | |
| 24 | + right: 0; | |
| 25 | + bottom: 0; | |
| 26 | + left: 0; | |
| 27 | + z-index: @zindex-drawer; | |
| 28 | + -webkit-overflow-scrolling: touch; | |
| 29 | + outline: 0; | |
| 30 | + } | |
| 31 | + | |
| 32 | + &-wrap * { | |
| 33 | + box-sizing: border-box; | |
| 34 | + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); | |
| 35 | + } | |
| 36 | + | |
| 37 | + &-mask { | |
| 38 | + .mask; | |
| 39 | + } | |
| 40 | + | |
| 41 | + &-content { | |
| 42 | + width: 100%; | |
| 43 | + height: 100%; | |
| 44 | + position: absolute; | |
| 45 | + top: 0; | |
| 46 | + bottom: 0; | |
| 47 | + background-color: #fff; | |
| 48 | + border: 0; | |
| 49 | + background-clip: padding-box; | |
| 50 | + box-shadow: 0 4px 12px rgba(0,0,0,.15); | |
| 51 | + | |
| 52 | + &-no-mask{ | |
| 53 | + pointer-events: auto; | |
| 54 | + } | |
| 55 | + } | |
| 56 | + | |
| 57 | + &-header { | |
| 58 | + .content-header; | |
| 59 | + } | |
| 60 | + | |
| 61 | + &-close { | |
| 62 | + z-index: 1; | |
| 63 | + .content-close(1px, 31px); | |
| 64 | + } | |
| 65 | + | |
| 66 | + &-body { | |
| 67 | + width: 100%; | |
| 68 | + height: calc(~'100% - 51px'); | |
| 69 | + padding: 16px; | |
| 70 | + font-size: 12px; | |
| 71 | + line-height: 1.5; | |
| 72 | + word-wrap: break-word; | |
| 73 | + position: absolute; | |
| 74 | + overflow: auto; | |
| 75 | + } | |
| 76 | + | |
| 77 | + &-no-header &-body{ | |
| 78 | + height: 100%; | |
| 79 | + } | |
| 80 | + | |
| 81 | + &-no-mask{ | |
| 82 | + pointer-events: none; | |
| 83 | + } | |
| 5 | 84 | } |
| 6 | 85 | \ No newline at end of file | ... | ... |
src/styles/custom.less