uni-drawer.md 5.3 KB
Newer Older
1
# uni-drawer 抽屉
M
mehaotian 已提交
2

M
mehaotian 已提交
3
::: tip 组件名:uni-drawer
M
mehaotian 已提交
4
> 代码块: `uDrawer`
M
mehaotian 已提交
5 6 7

[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-drawer)
:::
M
mehaotian 已提交
8 9 10 11

抽屉侧滑菜单。


M
mehaotian 已提交
12 13 14 15 16
## 介绍
::: warning 注意事项
> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
- `width` 属性仅在 `vue` 页面生效,`nvue` 页面因性能问题,不支持动态设置宽度,如需修改,请下载组件修改源码
:::
M
mehaotian 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
### 基本用法

```html
<template>
	<view>
		<button @click="showDrawer" type="primary">右侧弹出 显示Drawer</button>
		<uni-drawer ref="showRight" mode="right" :mask-click="false">
			<scroll-view style="height: 100%;" scroll-y="true">
				<button @click="closeDrawer" type="primary">关闭Drawer</button>
				<view v-for="item in 60" :key="item">可滚动内容 {{ item }}</view>
			</scroll-view>
		</uni-drawer>
	</view>
</template>

<script>
	export default {
		methods: {
			showDrawer() {
				this.$refs.showRight.open();
			},
			closeDrawer() {
				this.$refs.showRight.close();
			}

		}
	}
44
</script>
M
mehaotian 已提交
45 46 47 48 49 50
```

## API

### Drawer Props

M
mehaotian 已提交
51 52 53 54 55 56
|属性名|类型|默认值|说明|
|:-:|:-:|:-:|:-:|
|mask|Boolean|true|是否显示遮罩|
|maskClick|Boolean|true	|点击遮罩是否可以关闭抽屉|
|mode|String|left|Drawer滑出位置,可选值:left(从左侧滑出), right(从右侧滑出)|
|width|Number|220|Drawer 宽度,仅vue页面设置生效|
M
mehaotian 已提交
57 58 59 60


### Drawer Events

M
mehaotian 已提交
61 62 63
|事件名|说明|返回值|
|:-:|:-:|:-:	|
|@change|抽屉状态发生变化触发事件|true:抽屉已经打开;false:抽屉已经关闭;	|
M
mehaotian 已提交
64 65 66

### Drawer Methods

M
mehaotian 已提交
67 68 69
|方法称名	|说明|参数|
|:-:|:-:|:-:|
|open|打开抽屉	|-|
M
mehaotian 已提交
70 71 72
|close	|关闭抽屉	|-|


M
mehaotian 已提交
73
## 示例
74
::: warning 注意
M
mehaotian 已提交
75 76 77 78 79 80 81 82
示例依赖了 `uni-card` `uni-section` `uni-scss` 等多个组件,直接拷贝示例代码将无法正常运行 。

请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uni-drawer) ,在页面右侧选择 `使用 HBuilderX导入示例项目` ,体验完整组件示例。
:::

::: preview https://hellouniapp.dcloud.net.cn/pages/extUI/drawer/drawer
> Template
``` html
83 84 85 86 87 88
<template>
	<view>
		<uni-card is-full :is-shadow="false">
			<text class="uni-h6">这是抽屉式导航组件使用示例,可以指定菜单左侧或者右侧弹出(仅初始化生效),组件内部可以放置任何内容。点击页面按钮即可显示导航菜单。</text>
		</uni-card>

M
mehaotian 已提交
89 90 91 92 93 94 95 96 97 98
		<uni-section title="左侧滑出" type="line">
			<view class="example-body">
				<button type="primary" @click="showDrawer('showLeft')"><text class="word-btn-white">显示Drawer</text>
				</button>
				<uni-drawer ref="showLeft" mode="left" :width="320" @change="change($event,'showLeft')">
					<view class="close">
						<button @click="closeDrawer('showLeft')"><text class="word-btn-white">关闭Drawer</text></button>
					</view>
				</uni-drawer>
			</view>
99 100
		</uni-section>

M
mehaotian 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
		<uni-section title="右侧滑出" type="line">
			<view class="example-body">
				<button type="primary" @click="showDrawer('showRight')"><text class="word-btn-white">显示Drawer</text>
				</button>
				<uni-drawer ref="showRight" mode="right" :mask-click="false" @change="change($event,'showRight')">
					<view class="scroll-view">
						<scroll-view class="scroll-view-box" scroll-y="true">
							<view class="info">
								<text class="info-text">右侧遮罩只能通过按钮关闭,不能通过点击遮罩关闭</text>
							</view>
							<view class="close">
								<button @click="closeDrawer('showRight')"><text class="word-btn-white">关闭Drawer</text></button>
							</view>
							<view class="info-content" v-for="item in 100" :key="item">
								<text>可滚动内容 {{item}}</text>
							</view>
							<view class="close">
								<button  @click="closeDrawer('showRight')"><text class="word-btn-white">关闭Drawer</text></button>
							</view>
						</scroll-view>
					</view>
				</uni-drawer>
			</view>
124 125
		</uni-section>
	</view>
M
mehaotian 已提交
126 127 128
</template>
``` 
> Script
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
``` html
<script>
	export default {
		data() {
			return {
				showRight: false,
				showLeft: false
			}
		},
		methods: {
			confirm() {},
			// 打开窗口
			showDrawer(e) {
				this.$refs[e].open()
			},
			// 关闭窗口
			closeDrawer(e) {
				this.$refs[e].close()
			},
			// 抽屉状态发生变化触发
			change(e, type) {
				console.log((type === 'showLeft' ? '左窗口' : '右窗口') + (e ? '打开' : '关闭'));
				this[type] = e
			}
		},
		onNavigationBarButtonTap(e) {
			if (this.showLeft) {
				this.$refs.showLeft.close()
			} else {
				this.$refs.showLeft.open()
			}
		},
		// app端拦截返回事件 ,仅app端生效
		onBackPress() {
			if (this.showRight || this.showLeft) {
				this.$refs.showLeft.close()
				this.$refs.showRight.close()
				return true
			}
		}
	}
M
mehaotian 已提交
170
</script>
M
mehaotian 已提交
171

M
mehaotian 已提交
172 173
``` 
> Style
174 175
``` html
<style lang="scss">
M
mehaotian 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
.example-body {
	padding: 10px;
}
.scroll-view {
	/* #ifndef APP-NVUE */
	width: 100%;
	height: 100%;
	/* #endif */
	flex:1
}
// 处理抽屉内容滚动
.scroll-view-box {
	flex: 1;
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
}
.info {
	padding: 15px;
	color: #666;
}

.info-text {
	font-size: 14px;
	color: #666;
}
.info-content {
	padding: 5px 15px;
}
.close {
	padding: 10px;
209
}
M
mehaotian 已提交
210
</style>
M
mehaotian 已提交
211

M
mehaotian 已提交
212 213
```
:::
M
mehaotian 已提交
214

M
mehaotian 已提交
215
[完整示例演示](https://hellouniapp.dcloud.net.cn/pages/extUI/drawer/drawer)