使用vue创建一个吸顶的菜单项--简单版
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创建一个吸顶的菜单项--简单版的更多相关文章
- Vue开发——实现吸顶效果
因为项目需求,最近开始转到微信公众号开发,接触到了Vue框架,这个效果的实现虽说是基于Vue框架下实现的,但是同样也可以借鉴到其他地方,原理都是一样的. 进入正题,先看下效果图: 其实js做这个效果还 ...
- 用Vue创建一个新的项目
vue的安装 Vue.js不支持IE8及以下版本.因为Vue.js使用了ECMAScript5特性,IE8显然不能模拟.Vue.js支持所有兼容ECMAScript5的浏览器. 在用Vue.js构建大 ...
- 使用Vue创建一个新项目
1.环境 保证已经安装好了node\npm\vue等工具,将路径设置为想要建立新项目的文件夹路径 2.关于npm与cnpm npm包管理器,是集成在node中的,node环境安装完成,npm包管理器也 ...
- ng-alain创建组件添加路由导航菜单项基础步骤详解
首先呢~ 我们要在需要创建模块的路径例如AAA目录下,在终端打开(就是和在shell窗口打开一样的) 然后 ng g ng-alain:module XXXmodule 好了,创建了一个模块 接下来会 ...
- 如何创建一个https的站点(超简单) 以及 IIS7.5绑定Https域名
1.申请免费1年的ssl证书(传送门:https://common-buy.aliyun.com/?spm=5176.2020520163.cas.29.N0xOPM&commodityCod ...
- Elastic: 创建一个 Elastic 邮件警报 - 7.7 发行版
文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106185321 总结: 1.elastic 免费版只有发送警报到一个索引或者到Ser ...
- 使用vue-cli创建一个vue项目
安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...
- wordpress插件开发从创建一个新的菜单开始
创建插件的目的 1.我们为什么要创建一个插件? IT界有一个知名的论调叫做不要造重复的轮子,如果有可能的话,你应该尽可能的从现有的网络资源上选择一个已有的插件来使用,而不是重新创造一个.它耗费的精力很 ...
- 使用media Queries实现一个响应式的菜单
Media queries是CSS3引入的一个特性,使用它可以方便的实现各种响应式效果.在这个示例中我们将会使用media queries实现一个响应式的菜单.这个菜单会根据当前浏览器屏幕的大小变化而 ...
随机推荐
- linux读写一个NTFS分区
为了读写一个NTFS分区的数据,挂载的时候出现错误提示如下: root@tv:/home/xx# mount -t ntfs-3g /dev/sdb1 /media/sxx/硬盘B-临时文件 The ...
- HAProxy反向代理实例
1.环境准备: 设备 IP地址 作用 系统版本 web1 10.0.0.18 Nginx-Web服务器 Rocky8.6 web2 10.0.0.28 Nginx-Web服务器 Rocky8.6 Ha ...
- Java 编码那些事(一)
编码 做Web的同学,最开始一定遇到过乱码问题,工作这么久,一定听说过Unicode, GB2312等编码.典型的记事本选择的四种选项:ANSI,Unicode,Unicode big endian, ...
- 前后端分离项目(十一):实现"删"功能(前后端)
好家伙,本篇介绍如何实现"删"功能 来看效果, 数据库 (自然是没什么毛病) "增"搞定了,其实"删"非常简单 (我不会告诉你我是为了水一 ...
- clip-path属性深入理解与使用
clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域.区域内的部分显示,区域外的隐藏. clip-path的属性值可以是以下几种: 1.inset: 将元素剪裁为一个矩形, ...
- 2022NISACTF--WEB
easyssrf 打开题目,显示的是 尝试输入, 发现输入flag有东西 读取文件 访问下一个网站 读取文件 不能以file开头 直接伪协议,base64解码 checkIn 奇怪的unicode编码 ...
- 【题解】CF1013B And
题面传送门 解决思路 首先我们可以得出,$ a $ \(\&\) $ x $ \(=\) $ a $ \(\&\) $ x $ \(\&\) $ x $.由此得知,同一个 \( ...
- 嵌入式-C语言基础:数组指针
定义一个数组指针,指向二维数组: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//定义二维指针数组 p=a;//指向二维数组 ...
- 【Docker】容器使用规范--安全挂载建议
容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...
- 阿里技术专家详解 DDD 系列- Domain Primitive
简介: 关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构.框架和约束,来降低DDD的实践门槛,提升代码质量.可测试性.安全性.健壮性. 作者| ...