d3.js 画圆形菜单
2016-08-23 19:01
309 查看
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="application/javascript" src="../d3.js"></script> <title>Title</title> <style> #menu{ position:fixed; left:0; top:40%; background-color: transparent; } </style> </head> <body> <!--<svg width="400" height="400"> <!– Pie chart sample –> <path d="M200,200 L200,20 A180,180 0 0,1 377,231 z" style="fill:#ff0000; fill-opacity: 1; stroke:black; stroke-width: 1"/> <path d="M200,200 L377,231 A180,180 0 0,1 138,369 z" style="fill:#00ff00; fill-opacity: 1; stroke:black; stroke-width: 1"/> <path d="M200,200 L138,369 A180,180 0 0,1 20,194 z" style="fill:#0000ff; fill-opacity: 1; stroke:black; stroke-width: 1"/> <path d="M200,200 L20,194 A180,180 0 0,1 75,71 z" style="fill:#ff00ff; fill-opacity: 1; stroke:black; stroke-width: 1"/> <path d="M200,200 L75,71 A180,180 0 0,1 200,20 z" style="fill:#ffff00; fill-opacity: 1; stroke:black; stroke-width: 1"/> </svg>--> <div id="menu" class="menu"> </div> <script> var menuTexts=["Home","Page","News","Face"]; var color = d3.scale.category20(); var width = 150; //画布的宽度 var height = 300; //画布的高度 var menuR=50;//初始菜单的半径 var openMenuR=150;//展开菜单的半径 var menuAddLength=menuR/3;//圆形菜单中"+"号的长度定义 var menuAddCenterX=menuR/5+menuAddLength/2;//圆形菜单中"+"号的交汇点坐标X var menuAddCenterY=height/2;//圆形菜单中"+"号的交汇点坐标Y var svg = d3.select("#menu") //选择文档中的body元素 .append("svg") //添加一个svg元素 .attr("width", width) //设定宽度 .attr("height", height); //设定高度 for(var i=0;i<menuTexts.length;i++){ var startDu=180-(180/menuTexts.length*(i)); var endDu=180-(180/menuTexts.length*(i+1)); svg.append("path").attr("d","M 0 "+height/2+" L "+(0+Math.sin(2*Math.PI / 360*startDu)*150)+" "+(150+Math.cos(2*Math.PI / 360*startDu)*150)+" A "+(openMenuR)+" "+openMenuR+" 0 0 1 "+(0+Math.sin(2*Math.PI / 360*endDu)*150)+" "+(150+Math.cos(2*Math.PI / 360*endDu)*150)+" Z") .attr("class","menu-item") .attr("stroke","#ffffff") .attr("fill", "#ffffff"); } var menuStatus=false; var menuCircleOnClick=function (d,i) { if(menuStatus){ d3.selectAll(".menu-item") .transition() .delay(function(d,i){ return i * 500; }) .duration(1000) .ease("linear").attr("fill","#ffffff"); d3.select("#menu-circle").attr("fill","red"); d3.select("#menu-add-line").attr("stroke","#ffffff"); }else{ d3.select("#menu-add-line").attr("stroke","red"); d3.select("#menu-circle") .attr("fill","#ffffff"); d3.selectAll(".menu-item") .transition() .delay(function(d,i){ return i * 500; }) .duration(1000) .ease("linear").attr("fill","red"); } menuStatus=!menuStatus; }; svg.append("path").attr("d","M 0 "+(height/2-menuR)+" A "+menuR+" "+menuR+" 0 1 1 0 "+(height/2+menuR)+" Z") .attr("fill","red").attr("id","menu-circle") .on("click",menuCircleOnClick); svg.append("line").attr("x1",menuAddCenterX).attr("y1",menuAddCenterY-menuAddLength/2).attr("x2",menuAddCenterX).attr("y2",menuAddCenterY+menuAddLength/2) .attr("stroke","#ffffff").attr("stroke-width","2").on("click",menuCircleOnClick); svg.append("line").attr("x1",menuAddCenterX-menuAddLength/2).attr("y1",menuAddCenterY).attr("x2",menuAddCenterX+menuAddLength/2).attr("y2",menuAddCenterY) .attr("stroke","#ffffff").attr("stroke-width","2").attr("id","menu-add-line").on("click",menuCircleOnClick); </script> </body> </html>
相关文章推荐
- js小技巧7 js圆形浮动菜单下载
- 爆炸式的JS圆形浮动菜单特效代码
- 爆炸式的JS圆形浮动菜单特效代码
- js树型菜单的实现原理
- 如何解决js菜单被flash覆盖
- 级联菜单(三级)JS
- Js弹出右键菜单
- 树型导般菜单(js版)
- 对象化JS之----仿outlook或者QQ的菜单
- 发一个仿QQ菜单的JS
- 右键菜单----js代码
- 对象化JS之----仿outlook或者QQ的菜单
- js实现菜单命令
- 关联菜单(选中洲名列出相关信息 4000 )效果:http://free.2259.com/jscode.asp?js_id=940
- JS实现浏览器菜单命令
- 全国省市县无刷新多级关联菜单[网页特效JS代码]
- XML+ JS创建树形菜单
- JS常用菜单
- js树型菜单的实现原理
- 一个很酷的js菜单