基于JS与CSS的扇形菜单交互实现
作者:交互手记时间:2026-10-23 20:54:24浏览:519
本文通过具体代码示例,展示了如何利用JavaScript结合CSS样式实现一个扇形展开的导航菜单。该方案通过计算坐标定位菜单项,并配合点击事件触发展开与收回动画,为前端页面提供了一种独特的交互视觉效果。
扇形导航菜单实现原理
本文分享了一个使用JavaScript和CSS技术构建扇形导航菜单的具体实现方案,供读者参考学习。
核心代码结构
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>扇形导航</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
overflow: hidden;
}
#wrap{
height: 50px;
width: 50px;
/* background-color: pink; */
position: fixed;
right: 15px;
bottom: 15px;
/* overflow: hidden; */
}
#wrap>.home{
height: 49px;
width: 49px;
/* margin: auto; */
background: url(img/home.png) ;
background-position: center;
border-radius: 50%;
transition: 1s;
position: absolute;
z-index: 1;
}
#wrap>.nav{
height: 100%;
position: relative;
}
#wrap>.nav>img{
position: absolute ;
right: 0px;
bottom: 0px;
margin: 4px;
border-radius: 50% ;
}
.home:hover{
transform: rotate(360);
}
</style>
</head>
<body>
<div id="wrap">
<div class="home"></div>
<div class="nav">
<img src="img/clos.png" >
<img src="img/full.png" >
<img src="img/open.png" >
<img src="img/prev.png" >
<img src="img/refresh.png" >
</div>
</div>
</body>
<script type="text/javascript">
window.onload =function(){
var homeEle = document.querySelector("#wrap>.home");
var flag= true;
var imgs =document.querySelectorAll("#wrap>.nav>img");
function fn(){
this.style.transition=0.3+"s";
this.style.transform ="rotate(-360deg) scale(1)";
this.style.opacity =1;
this.removeEventListener("transitionend",fn);
}
for (var i=0;i<imgs.length;i++) {
imgs[i].onclick =function(){
this.style.transform ="rotate(-360deg) scale(2)";
this.style.transition ="0.3s";
this.style.opacity =0.1;
this.addEventListener("transitionend",fn);
}
}
homeEle.onclick =function(){
console.log(imgs.length);
if(flag){
this.style.transform="rotate(-720deg) ";
imgs.forEach((index,No)=>{
imgs[No].style.right = getLocation(140,No*22.5/180*Math.PI).left+"px";
imgs[No].style.bottom = getLocation(140,No*22.5/180*Math.PI).top+"px";
imgs[No].style.transform ="rotate(-360deg) scale(1)";
imgs[No].style.transition ="1s "+No*0.1+"s";
});
}else{
this.style.transform="rotate(0)";
imgs.forEach((index,No)=>{
imgs[No].style.right = 0+"px";
imgs[No].style.bottom = 0+"px";
imgs[No].style.transform ="rotate(0deg) scale(1)";
imgs[No].style.transition="1s "+(0.4-No*0.1)+"s";
});
}
flag =!flag;
}
var getLocation =function(r,deg){
var x =Math.round(r*Math.sin(deg));
var y =Math.round(r*Math.cos(deg));
return{left:x,top:y};
}
}
</script>
</html>

以上内容为本文的全部介绍,期望能为读者的技术学习提供有益帮助,同时也欢迎继续支持本站获取更多资源。
作者最新文章
JS怎么实现页面强制刷新
2026-11-05 14:53:38
点击JS链接直接运行不下载?前端实现.js文件强制下载的三种方法
2026-11-05 12:12:23
怎么封装一个通用的JS创建元素辅助函数
2026-11-05 11:41:41
Swiper.js 怎么监听滑动结束并获取当前索引
2026-11-05 10:57:15
HTML、CSS和JS的关系:Web前端三件套怎么协作
2026-11-04 15:41:40
