From 664d69fbe574bfaf3862d4804390e4b77df9fc19 Mon Sep 17 00:00:00 2001
From: Tevin <tingquanren@163.com>
Date: Thu, 23 Sep 2021 17:32:27 +0800
Subject: [PATCH] 实现抽屉公共组件,代替TaroUI的抽屉

---
 layout/drawer/CDrawer.vue  |   47 +++++++++++++++
 layout/drawer/cDrawer.scss |   76 +++++++++++++++++++++++++
 layout/drawer/index.js     |   10 +++
 3 files changed, 133 insertions(+), 0 deletions(-)

diff --git a/layout/drawer/CDrawer.vue b/layout/drawer/CDrawer.vue
new file mode 100644
index 0000000..d84adc2
--- /dev/null
+++ b/layout/drawer/CDrawer.vue
@@ -0,0 +1,47 @@
+/**
+ * CDrawer - 抽屉
+ * @author Tevin
+ */
+
+<template>
+    <view
+        class="c-drawer"
+        :class="[show?'c-drawer-show':'', 'c-drawer-' + direction]"
+    >
+        <view
+            class="c-drawer-mask"
+            @tap="evt => handleClose()"
+        ></view>
+        <view class="c-drawer-container">
+            <slot />
+        </view>
+    </view>
+</template>
+
+<script>
+import Taro from '@tarojs/taro';
+import {} from 'taro-ui-vue';
+import './cDrawer.scss';
+
+export default {
+    name: 'CDrawer',
+    components: {},
+    props: {
+        // 显示隐藏
+        show: { type: Boolean, default: false },
+        // 从哪个方向滑出,支持 top、left、right
+        direction: { type: String, default: 'right' },
+        // 关闭回调
+        onClose: Function,
+    },
+    data() {
+        return {};
+    },
+    methods: {
+        handleClose() {
+            this.onClose();
+        },
+    },
+    mounted() {},
+};
+</script>
diff --git a/layout/drawer/cDrawer.scss b/layout/drawer/cDrawer.scss
new file mode 100644
index 0000000..152c574
--- /dev/null
+++ b/layout/drawer/cDrawer.scss
@@ -0,0 +1,76 @@
+/**
+ * drawer
+ * @author Tevin
+ */
+
+@import "../../common/sassMixin";
+
+.c-drawer {
+    @include position(fixed, 0 0 0 0, 9000);
+    pointer-events: none;
+    &.c-drawer-show {
+        pointer-events: all;
+        .c-drawer-mask {
+            display: block;
+            opacity: 1;
+        }
+        .c-drawer-container {
+            opacity: 1;
+        }
+    }
+    .c-drawer-mask {
+        display: none;
+        @include position(absolute, 0 0 0 0);
+        background-color: rgba(0, 0, 0, 0.3);
+        opacity: 0;
+        transition: opacity 300ms cubic-bezier(0.36, 0.66, 0.04, 1);
+        &:active {
+            background-color: rgba(0, 0, 0, 0.25);
+        }
+    }
+    .c-drawer-container {
+        @include position(absolute, 0 n 0 0, 1);
+        width: 550px;
+        text-align: left;
+        opacity: 0;
+        background-color: #FFF;
+        overflow-y: auto;
+        -webkit-overflow-scrolling: touch;
+        transition: all 225ms cubic-bezier(0, 0, 0.2, 1);
+    }
+    &.c-drawer-left {
+        &.c-drawer-show {
+            .c-drawer-container {
+                transform: translateX(0%);
+            }
+        }
+        .c-drawer-container {
+            left: 0;
+            transform: translateX(-100%);
+        }
+    }
+    &.c-drawer-right {
+        &.c-drawer-show {
+            .c-drawer-container {
+                transform: translateX(0%);
+            }
+        }
+        .c-drawer-container {
+            right: 0;
+            transform: translateX(100%);
+        }
+    }
+    &.c-drawer-top {
+        &.c-drawer-show {
+            .c-drawer-container {
+                transform: translateY(0%);
+            }
+        }
+        .c-drawer-container {
+            width: 100%;
+            min-height: 200px;
+            bottom: auto;
+            transform: translateY(-100%);
+        }
+    }
+}
\ No newline at end of file
diff --git a/layout/drawer/index.js b/layout/drawer/index.js
new file mode 100644
index 0000000..cf7ddcf
--- /dev/null
+++ b/layout/drawer/index.js
@@ -0,0 +1,10 @@
+/**
+ * CDrawer
+ * @author Tevin
+ */
+
+import CDrawer from '@components/layout/drawer/CDrawer.vue';
+
+export {
+    CDrawer,
+}
\ No newline at end of file

--
Gitblit v1.9.1