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. 41.SessionAuthenticatio和自定义认证

    SessionAuthentication认证介绍 SessionAuthentication使用了Django默认的会话后端 适合AJAX客户端等运行在同样会话上下文环境中的模式 是DRF默认的认证 ...

  2. 10.异步mysql

    python中操作mysql连接.操作.断开都是网络IO #安装支持异步aiomysql的模块 pip3 install aiomysql async def execute(): # 网络IO操作, ...

  3. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  4. 一文理解Cookie、Session

    一文理解Cookie.Session 1.什么是会话 用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: HTTP 是无状态,有会话的 HTTP 是无 ...

  5. .net core Blazor+自定义日志提供器实现实时日志查看器

    场景 我们经常远程连接服务器去查看日志,比较麻烦,如果直接访问项目的某个页面就能实时查看日志就比较奈斯了,花了1天研究了下.net core 日志的原理,结合blazor实现了基本效果. 实现原理 自 ...

  6. Pyhton基础部分:6、与用户交互、基础运算符

    目录 一.python数据类型 1.布尔值bool 2.元组tuple 3.集合set 二.与用户交互 1.获取用户输入 2.输出内部信息 3.语言环境差异 三.格式化输入 1.代码实现 2.注意事项 ...

  7. python 的time、datetime模块

    python 时间模块 import datetime ​ res = datetime.datetime.now() print(res) # 2022-08-07 16:47:07.120459 ...

  8. 【OpenStack云平台】openstack命令行管理之环境变量设置

    上传镜像(glance组件) glance 可以使用以下参数: ps:这些参数不是100%都需要的我们在上传镜像更加我们需求选择相对应的参数就好了 –id <IMAGE_ID> #镜像的I ...

  9. netty系列之:在netty中使用proxy protocol

    目录 简介 netty对proxy protocol协议的支持 HAProxyMessage的编码解码器 netty中proxy protocol的代码示例 总结 简介 我们知道proxy proto ...

  10. 重学c#系列——委托和匿名函数[二十五]

    前言 简单介绍一下什么是委托. 正文 以前也写过委托,这次算是重新归档,和新的补充吧. https://www.cnblogs.com/aoximin/p/13940125.html 有些人说委托是函 ...