1.hover时候出现,总体来说只改了一下两个index.vue,还有route文件

src\layoutTwo\index.vue

<template>
<div class="main_container_webgl">
<!-- <div :class="classObj" class="app-wrapper">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" /> <div >
<div :class="{'fixed-header':fixedHeader}">
</div> -->
<app-main /> <div class="my_menu_hover">
<sidebar />
</div>
</div>
</template> <script>
import {
Navbar,
Sidebar,
AppMain
} from './components'
import ResizeMixin from './mixin/ResizeHandler' export default {
name: 'LayoutTwo',
components: {
Navbar,
Sidebar,
AppMain
},
mixins: [ResizeMixin],
computed: {
sidebar() {
return this.$store.state.app.sidebar
},
device() {
return this.$store.state.app.device
},
fixedHeader() {
return this.$store.state.settings.fixedHeader
},
classObj() {
return {
hideSidebar: !this.sidebar.opened,
openSidebar: this.sidebar.opened,
withoutAnimation: this.sidebar.withoutAnimation,
mobile: this.device === 'mobile'
}
}
},
methods: {
handleClickOutside() {
this.$store.dispatch('app/closeSideBar', {
withoutAnimation: false
})
}
}
}
</script> <style lang="scss" scoped>
@import "~@/styles/mixin.scss";
@import "~@/styles/variables.scss"; // 测试菜单
#app {
.main_container_webgl {
.my_menu_hover {
height: 50px;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 99999;
background: rgba(0, 0, 0, 0); /deep/.my_layout_sidebar_test {
width: 100%;
height: 0px;
line-height: 0px;
overflow: hidden;
background: rgba(0, 0, 0, 0.2);
font-size: 15px;
color: white;
display: flex;
justify-content: space-between; /deep/.my_layout_sidebar_test_li {
display: inline-block;
width: 200px;
height: 100px;
line-height: 100px; .my_font {
text-align: center;
color: white;
} .my_font:hover {
color: #49e0ff;
}
}
}
} .my_menu_hover:hover {
height: 150px;
transition: all .5s linear;
background: rgba(0, 0, 0, 0.5);
border: 1px solid black; /deep/.my_layout_sidebar_test {
height: 100px;
line-height: 100px;
font-size: 20px; /deep/.my_layout_sidebar_test_li {
display: inline-block;
width: 200px;
height: 100px;
line-height: 100px; }
} } }
} // 测试菜单 .app-wrapper {
@include clearfix;
position: relative;
height: 100%;
width: 100%; &.mobile.openSidebar {
position: fixed;
top: 0;
}
} .drawer-bg {
background: #000;
opacity: 0.3;
width: 100%;
top: 0;
height: 100%;
position: absolute;
z-index: 999;
} .fixed-header {
position: fixed;
top: 0;
right: 0;
z-index: 9;
width: calc(100% - #{$sideBarWidth});
transition: width 0.28s;
} .hideSidebar .fixed-header {
width: calc(100% - 54px)
} .mobile .fixed-header {
width: 100%;
}
</style>

src\layoutTwo\components\Sidebar\index.vue

<template>
<ul class="my_layout_sidebar_test">
<li v-for="route in routes" :key="route.path" class="my_layout_sidebar_test_li">
<app-link :to="route.redirect">
<div class="my_font">{{route.meta.title}}</div>
</app-link>
</li>
</ul>
</template> <script>
import {
mapGetters
} from 'vuex';
import AppLink from './Link'
import Logo from './Logo';
import SidebarItem from './SidebarItem';
import variables from '@/styles/variables.scss'; export default {
components: {
SidebarItem,
Logo,AppLink
},
computed: {
...mapGetters(['sidebar']),
routes() {
let arr = this.$router.options.routes.filter(_ => _.hidden === false)
return arr;
},
activeMenu() {
const route = this.$route;
const {
meta,
path
} = route;
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu;
}
return path;
},
showLogo() {
return this.$store.state.settings.sidebarLogo;
},
variables() {
return variables;
},
isCollapse() {
return !this.sidebar.opened;
}
}
};
</script> <style lang="less" scoped> </style>

src\layoutTwo\components\Sidebar\Link.vue


<template>
<!-- eslint-disable vue/require-component-is -->
<component v-bind="linkProps(to)">
<slot />
</component>
</template> <script>
import { isExternal } from '@/utils/validate' export default {
props: {
to: {
type: String,
required: true
}
},
methods: {
linkProps(url) {
if (isExternal(url)) {
return {
is: 'a',
href: url,
target: '_blank',
rel: 'noopener'
}
}
return {
is: 'router-link',
to: url
}
}
}
}
</script>

route

{
path: '/login',
component: () => import('@/views/login/index'),
meta: { title: 'login', icon: 'dashboard' },
hidden: true
},
{
path: '/',
hidden: false,
component: layoutTwo,
redirect: '/dashboard',
meta: { title: '首頁', icon: 'dashboard' },
children: [
{
path: 'dashboard',
name: 'Dashboard',
component: () => import('@/views/FFF/FFF01'),
meta: { title: '首頁', icon: 'dashboard' }
}
]
},
{
path: '/FFFOne',
hidden: false,
component: layoutTwo,
redirect: '/FFFOne/first',
meta: { title: 'FFFOne', icon: 'dashboard' },
children: [
{
path: 'first',
name: 'first',
component: () => import('@/views/FFF/FFF01'),
meta: { title: '首頁', icon: 'dashboard' }
}
]
},

使用vue创建一个吸顶的菜单项--简单版的更多相关文章

  1. Vue开发——实现吸顶效果

    因为项目需求,最近开始转到微信公众号开发,接触到了Vue框架,这个效果的实现虽说是基于Vue框架下实现的,但是同样也可以借鉴到其他地方,原理都是一样的. 进入正题,先看下效果图: 其实js做这个效果还 ...

  2. 用Vue创建一个新的项目

    vue的安装 Vue.js不支持IE8及以下版本.因为Vue.js使用了ECMAScript5特性,IE8显然不能模拟.Vue.js支持所有兼容ECMAScript5的浏览器. 在用Vue.js构建大 ...

  3. 使用Vue创建一个新项目

    1.环境 保证已经安装好了node\npm\vue等工具,将路径设置为想要建立新项目的文件夹路径 2.关于npm与cnpm npm包管理器,是集成在node中的,node环境安装完成,npm包管理器也 ...

  4. ng-alain创建组件添加路由导航菜单项基础步骤详解

    首先呢~ 我们要在需要创建模块的路径例如AAA目录下,在终端打开(就是和在shell窗口打开一样的) 然后 ng g ng-alain:module XXXmodule 好了,创建了一个模块 接下来会 ...

  5. 如何创建一个https的站点(超简单) 以及 IIS7.5绑定Https域名

    1.申请免费1年的ssl证书(传送门:https://common-buy.aliyun.com/?spm=5176.2020520163.cas.29.N0xOPM&commodityCod ...

  6. Elastic: 创建一个 Elastic 邮件警报 - 7.7 发行版

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106185321 总结: 1.elastic 免费版只有发送警报到一个索引或者到Ser ...

  7. 使用vue-cli创建一个vue项目

    安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...

  8. wordpress插件开发从创建一个新的菜单开始

    创建插件的目的 1.我们为什么要创建一个插件? IT界有一个知名的论调叫做不要造重复的轮子,如果有可能的话,你应该尽可能的从现有的网络资源上选择一个已有的插件来使用,而不是重新创造一个.它耗费的精力很 ...

  9. 使用media Queries实现一个响应式的菜单

    Media queries是CSS3引入的一个特性,使用它可以方便的实现各种响应式效果.在这个示例中我们将会使用media queries实现一个响应式的菜单.这个菜单会根据当前浏览器屏幕的大小变化而 ...

随机推荐

  1. SpringBoot 阶段测试 1

    SpringBoot 阶段测试 1 目录 SpringBoot 阶段测试 1 1.使用JDK8新语法完成下列集合练习: 1.1 List中有1,2,3,4,5,6,7,8,9几个元素要求; (1) 将 ...

  2. Mysql综合实验2-LAMP+MHA+MYcat分库

    实验目标: 1.搭建主从半同步+GTID复制 2.搭建MHA主服务器高可用 3.Mycat实现分库:wordpress库和shopxo库 4.客户通过域名可以访问到wordpress和shopxo 实 ...

  3. 常用类.String类

    package 常用类.String;import java.util.Arrays;import java.util.Locale;public class demo01 { public stat ...

  4. MYSQL一键导库脚本

    上周完成了一个性能测试环境搭建,有富余时间的同时研究了一个一键导库的脚本,一周的开始先马住!!! 一.思路 准备:54.158服务器上分别已经装好了MYSQL数据库 目的:把部分库从54导出并导入到1 ...

  5. Java自定义排序

    实现Comparator接口 实现该接口需要重写compare()方法 Arrays.sort(students, new Comparator<Student>() { @Overrid ...

  6. 我的第一个项目(二):使用Vue做一个登录注册界面

    好家伙,   顶不住了,太多的bug, 本来是想把背景用canvas做成动态的,但是,出现了各种问题 为了不耽误进度,我们先把一个简单的登录注册界面做出来 来看看效果:  (看上去还不错) 本界面使用 ...

  7. [排序算法] 简单选择排序 (C++)

    简单选择排序原理 简单选择排序 SelectSort 是一种十分直观地排序方法.其原理是每次从未排序的元素中找到当前最小的元素,放在当前未排序序列的首位.一直重复操作直至最后未排序的元素个数为 0,即 ...

  8. C温故补缺(十二):预编译器与头文件

    预编译器 预编译器就是之前学的预编译指令的执行者 gcc -E test.c -o test.i 生成预编译文件就是翻译#指令 比如#include<stdio.h>就是把整个stdio. ...

  9. 【Shell案例】【awk map计数&sort按指定列排序】9、统计每个单词出现的个数

    描述写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数. 为了简单起见,你可以假设:nowcoder.txt只包括小写字母和空格.每个单词只由小写字母组成.单词间由 ...

  10. 【离线数仓CDH版本】即席查询工具(Presto、Druid、Kylin)、CDH数仓、Impala查询

    1.即席查询 一.Presto 大数据量.秒级.多数据源的查询引擎[支持各种数据源work的内存级查询] 由coordinator和多个work构成,work对应不同数据源Catalog 特点:基于内 ...