UI实现分享:动态导航栏UI 实现分享: 动态导航栏
⽂章⽬录
正⽂
1. 实现效果
先来看看最终实现效果
静态图
动态效果
2. 实现细节
2.1 html 布局元素布局上⽐较简单,分成中⼼的 .toggle 元素,以及周围的 li 元素列表index.html
li 列表的部分我们稍微⽤⼀下 JavaScript 进⾏列表渲染
index.js 注意这⾥的 <ion-icon> 使⽤ cdn 的 webcomponent 图标导⼊在 <head> ⾥⾯贴上这两句就⾏了 <div id ="app "> <ul class ="menu "> <div class ="toggle "> <ion-icon name ="add-outline "></ion-icon > </div > </ul > </div >
1
2
3
4
5
6
7const menu = document .querySelector ('.menu');const items = [ 'home-outline', 'person-outline', 'settings-outline', 'mail-outline', 'key-outline', 'videocam-outline', 'game-controller-outline', 'camera-outline',];items .forEach ((type , i ) => { const li = document .createElement ('li'); li .style = `--i: ${i }`; li .innerHTML = `<a><ion-icon name="${type }"></ion-icon></a>`; menu .appendChild (li );});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2.2 元素定位
对于 UI 实现⽐较重要的部分在于 CSS 属性的设置,⾸先我们先来看布局、定位相关的
index.html
body 的部分设置⼀下渐层背景⾊
接下来分别定为⼀下整个导航栏的结构
Menu 为 200 * 200、然后使⽤ flex ⽔平垂直居中
中间的按钮为 60 * 60,然后使⽤ flex 使图标相对居中
2.3 导航栏列表项
接下来⽐较难的就是外围的导航栏列表项,⼀个⼀个定位未免太傻,所以我们使⽤ transform-origin + transform: rotate 的效果,制造出多个图标围绕同样⼀个中⼼进⾏旋转的效果(其中还使⽤ i 变量辅助计算)
<script type ="module " src ="unpkg/ionicons@5.5.2/dist/ionicons/ionicons.esm.js "></script ><script nomodule src ="unpkg/ionicons@5.5.2/dist/ionicons/ionicons.js "></script >
1
2
3
4
5
6
7
8body { width : 100vw ; height : 100vh ; margin : 0; font-family : 'Poppins', sans-serif ; background : linear-gradient (45deg , #8460ed , #ff1252); display : flex ; justify-content : center ; align-items : center ;}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
1
2
3
4
5
6
同时由于每个⼩项是以外部点为中⼼旋转,⾃⾝还需要转回来来保证图标正向朝上
2.4 动画效果
最后再来实现动画效果⾸先先对中⼼点加个点击事件来开关 active 属性
这⾥加了个计时器,整个动画⼤概会持续 1.3 秒,动画结束前不让再次点击中⼼点旋转 315 度,使 + 符号旋转后变成 x
接下来是列表项,⼀开始我们先将每个项隐藏在中间的⼤按钮后⾯,然后点击后旋转透出.menu li { position : absolute ; left : 0; list-style : none ; transform-origin : 100px ; transform : rotate (calc (360deg / 8 * var (--i ))); z-index : 1;}
1
2
3
45
6
7
1
2
3
4
5
6
7const menu = document .querySelector ('.menu');const toggle = document .querySelector ('.toggle');let disable = false ;toggle .addEventListener ('click', () => { // le('active'); if (!disable ) { disable = true ; menu .classList .toggle ('active'); setTimeout (() => { disable = false ; }, 1300); }});
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
1
2
3
4
5js导航栏下拉菜单
6
7
8
9
10
11
2.5 hover 变⾊
hover 之后改变图标颜⾊就不⽤说啦
其他资源
参考连接
Title
Link Animated Circular Navigation Menu using Html CSS & Vanilla Javascript Simple Radial Menu
完整代码⽰例.menu.active li a:hover { color : #ff1252;}
1
2
3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论