diff --git a/src/components/ScrollBar/index.vue b/src/components/ScrollBar/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..8ef203bee1cfdc7b386a1f9e857841c4d1c68745 --- /dev/null +++ b/src/components/ScrollBar/index.vue @@ -0,0 +1,54 @@ +<template> + <div class='scroll-container' ref='scrollContainer' @mousewheel="handleScroll"> + <div class='scroll-wrapper' ref='scrollWrapper' :style="{top: top + 'px'}"> + <slot></slot> + </div> + </div> +</template> + +<script> +const delta = 15 +export default { + name: 'scrollBar', + data() { + return { + top: 0 + } + }, + methods: { + handleScroll(e) { + e.preventDefault() + const $container = this.$refs.scrollContainer + const $containerHeight = $container.offsetHeight + const $wrapper = this.$refs.scrollWrapper + const $wrapperHeight = $wrapper.offsetHeight + if (e.wheelDelta > 0) { + this.top = Math.min(0, this.top + e.wheelDelta) + } else { + if ($containerHeight - delta < $wrapperHeight) { + if (this.top < -($wrapperHeight - $containerHeight + delta)) { + this.top = this.top + } else { + this.top = Math.max(this.top + e.wheelDelta, $containerHeight - $wrapperHeight - delta) + } + } else { + this.top = 0 + } + } + } + } +} +</script> + +<style rel="stylesheet/scss" lang="scss" scoped> +.scroll-container { + position: relative; + width: 100%; + height: 100%; + background-color: #545c64; + .scroll-wrapper { + position: absolute; + width: 100%; + } +} +</style> diff --git a/src/components/ScrollPane/index.vue b/src/components/ScrollPane/index.vue index 667082a78323f61bd5463d14301bdc37c0985e44..dc74400d1a560e421d67264601f6a233e1ce540d 100644 --- a/src/components/ScrollPane/index.vue +++ b/src/components/ScrollPane/index.vue @@ -21,7 +21,6 @@ export default { const $containerWidth = $container.offsetWidth const $wrapper = this.$refs.scrollWrapper const $wrapperWidth = $wrapper.offsetWidth - console.log($containerWidth, $wrapperWidth) if (e.wheelDelta > 0) { this.left = Math.min(0, this.left + e.wheelDelta) } else { diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss index eeb56142c02703cad7695af7cd6a118fbb03b63a..1a85482858af47a964753cdef277d17e8690d88c 100644 --- a/src/styles/sidebar.scss +++ b/src/styles/sidebar.scss @@ -14,10 +14,6 @@ bottom: 0; left: 0; z-index: 1001; - overflow-y: auto; - &::-webkit-scrollbar { - display: none - } a { display: inline-block; width: 100%; @@ -27,12 +23,13 @@ } .el-menu { border: none; + width: 100%; } } .hideSidebar { - .sidebar-container { + .sidebar-container,.sidebar-container .el-menu { width: 36px!important; - overflow: inherit; + // overflow: inherit; } .main-container { margin-left: 36px; diff --git a/src/views/layout/components/Navbar.vue b/src/views/layout/components/Navbar.vue index ee6d5c6af44f61620d8fd62e3427fa2cebb1d7c7..33b3c18dd8606d367e895bc7d3b1ad22e02c1c7e 100644 --- a/src/views/layout/components/Navbar.vue +++ b/src/views/layout/components/Navbar.vue @@ -2,7 +2,7 @@ <el-menu class="navbar" mode="horizontal"> <hamburger class="hamburger-container" :toggleClick="toggleSideBar" :isActive="sidebar.opened"></hamburger> - <levelbar></levelbar> + <levelbar class="levelbar-container"></levelbar> <div class="right-menu"> @@ -111,6 +111,9 @@ export default { float: left; padding: 0 10px; } + .levelbar-container{ + float: left; + } .errLog-container { display: inline-block; vertical-align: top; diff --git a/src/views/layout/components/Sidebar.vue b/src/views/layout/components/Sidebar.vue index 301a86ee43cc597b42369b09c7225ff68a4d7b8a..a8028d0d52349f0a64bae1fa13a1ec7b42e50258 100644 --- a/src/views/layout/components/Sidebar.vue +++ b/src/views/layout/components/Sidebar.vue @@ -1,14 +1,19 @@ <template> - <el-menu mode="vertical" unique-opened :default-active="$route.path" :collapse="isCollapse" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> - <sidebar-item :routes='permission_routers'></sidebar-item> - </el-menu> + <scroll-bar> + <el-menu mode="vertical" unique-opened :default-active="$route.path" :collapse="isCollapse" background-color="#545c64" text-color="#fff" + active-text-color="#ffd04b"> + <sidebar-item :routes='permission_routers'></sidebar-item> + </el-menu> + </scroll-bar> </template> <script> import { mapGetters } from 'vuex' import SidebarItem from './SidebarItem' +import ScrollBar from '@/components/ScrollBar' + export default { - components: { SidebarItem }, + components: { SidebarItem, ScrollBar }, computed: { ...mapGetters([ 'permission_routers',