1 <!--
2 * @Description: nav侧边栏
3 * @Version: 1.0
4 * @Autor: Nanke_南柯
5 * @Date: 2020-09-03 17:22:19
6 * @LastEditors: Nanke_南柯
7 * @LastEditTime: 2020-09-19 15:55:27
8 -->
9 <template>
10 <div class="Top20_ProblemAnalysis">
11 <div class="rightNav">
12 <ul class="tab-nav">
13 <li v-for="(i, index) in navList" :key="index">
14 <div class="nav" @click="openNav(index, i.list.length)">
15 <i class="el-icon-s-home"></i>
16 <span>{{ i.title }}</span>
17 <i v-if="i.list.length" id="right-btn" class="el-icon-arrow-right"></i>
18 </div>
19 <div class="nav-n-box">
20 <div class="nav-n" v-for="(n, index) in i.list" :key="index">{{ n.title }}</div>
21 </div>
22 </li>
23 </ul>
24 </div>
25 </div>
26 </template>
27
28 <script>
29 export default {
30 components: {},
31 props: {},
32 data() {
33 return {
34 navList: [
35 {
36 title: '首页',
37 name: 'home',
38 list: [],
39 },
40 {
41 title: '业务介绍',
42 name: 'BusinessIntroduction',
43 list: [
44 {
45 title: '交易规则',
46 name: 'BusinessIntroduction',
47 },
48 {
49 title: '政策法规',
50 name: 'BusinessIntroduction',
51 },
52 ],
53 },
54 {
55 title: '新闻资讯',
56 name: 'News',
57 list: [
58 {
59 title: '公告通知',
60 name: 'BusinessIntroduction',
61 },
62 {
63 title: '公司新闻',
64 name: 'BusinessIntroduction',
65 },
66 {
67 title: '行业资讯',
68 name: 'BusinessIntroduction',
69 },
70 ],
71 },
72 {
73 title: '关于我们',
74 name: 'AboutUs',
75 list: [
76 {
77 title: '中心介绍',
78 name: 'BusinessIntroduction',
79 },
80 {
81 title: '法律申明',
82 name: 'BusinessIntroduction',
83 },
84 {
85 title: '常见问题',
86 name: 'BusinessIntroduction',
87 },
88 ],
89 },
90 ],
91 };
92 },
93 watch: {},
94 computed: {},
95 methods: {
96 openNav(index, num) {
97 let _this = this;
98 let nav = document.querySelectorAll('.nav'); //获取父级菜单栏,以便添加选中样式
99 let items = document.querySelectorAll('.nav-n-box'); //获取容纳子级菜单栏的容器,以便动态设置高度,实现下拉效果
100
101 //-----------------可注释部分开始------注释后则不是手风琴效果------------------
102 // 遍历菜单栏,移除所有选中后的样式 添加此段可实现手风琴效果,注释则实现多展示效果
103 for (let i = 0; i < nav.length; i++) {
104 if (
105 items[i].style.height == '' ||
106 items[i].style.height == '0rem' ||
107 nav[index].classList.contains('nav-n-box-active') //判断标签内是否含有该class属性,以布尔值类型返回
108 ) {
109 let height = items[index].style.height;
110 items[index].style.height = height;
111 } else {
112 items[i].style.height = '0rem';
113 }
114 nav[i].classList.remove('nav-n-box-active');
115 }
116 //-----------------可注释部分结束------------------------
117
118 //根据子菜单栏的高度判断,是否展开菜单栏,若有进行遍历操作,那么每次点击某个菜单栏的时候 height 都为 0
119 if (items[index].style.height == '' || items[index].style.height == '0rem') {
120 //num 为子菜单栏的个数,根据子菜单栏确定容器的高度
121 items[index].style.height = num * 2 + 'rem';
122 //添加右箭头旋转样式
123 nav[index].classList.add('nav-n-box-active');
124 } else {
125 items[index].style.height = '0rem';
126 //移除右箭头旋转样式
127 nav[index].classList.remove('nav-n-box-active');
128 }
129 //------------------------------------------
130 },
131 },
132 created() {},
133 mounted() {},
134 };
135 </script>
136 <style lang="scss" scoped>
137 .Top20_ProblemAnalysis {
138 width: 100%;
139 height: calc(100vh - 160px);
140 position: relative;
141 display: flex;
142 justify-content: center;
143 align-items: center;
144 color: #fff;
145 .rightNav {
146 width: 65%;
147 height: 500px;
148 background: white;
149 max-width: 200px;
150 margin-top: 20px;
151
152 .tab-nav {
153 padding: 1rem;
154 list-style: none;
155
156 li {
157 display: flex;
158 align-items: center;
159 flex-wrap: wrap;
160 cursor: pointer;
161 user-select: none;
162
163 .nav {
164 padding: 1rem 0;
165 width: 100%;
166 display: flex;
167 align-items: center;
168 justify-content: space-between;
169
170 i {
171 transition: 0.3s;
172 color: rgb(0, 225, 255);
173 }
174
175 span {
176 display: inline-block;
177 width: 100%;
178 text-align: left;
179 color: #808080;
180 font-size: 0.88rem;
181 margin-left: 1rem;
182 }
183 }
184
185 .nav-n-box {
186 transition: 0.3s;
187 width: 100%;
188 height: 0;
189 overflow: hidden;
190
191 .nav-n {
192 width: 100%;
193 font-size: 0.88rem;
194 color: #808080;
195 height: 2rem;
196 text-align: left;
197 padding-left: 2rem;
198 line-height: 2rem;
199 transition: 0.3s;
200
201 &:hover {
202 background: rgb(0, 225, 255);
203 color: white;
204 opacity: 0.5;
205 }
206 }
207 }
208 }
209 }
210 }
211
212 //点击后右箭头的反转效果
213 .nav-n-box-active {
214 #right-btn {
215 transform: rotate(90deg) !important;
216 }
217 }
218 }
219 </style>