PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 网页制作 >> Javascript >> 

JavaScript—旋转导航菜单

JavaScript—旋转导航菜单

来源:PHP程序员站  作者:PHP程序员站  发布时间:2011-06-19
javascript 实现的旋转导航效果.有点苹果的味道. 如图: 旋转导航菜单下载 现在网站大都采用平面的导航菜单,一旦菜单项目太多,而网页版面有限,便显得菜单特别拥挤,针对这种情况,我们来制作一款三维旋转导航菜单,它不仅有效的节约了版面,还能彰显网站的个性。首先

javascript 实现的旋转导航效果.有点苹果的味道.

如图:

 

旋转导航菜单下载

现在网站大都采用平面的导航菜单,一旦菜单项目太多,而网页版面有限,便显得菜单特别拥挤,针对这种情况,我们来制作一款三维旋转导航菜单,它不仅有效的节约了版面,还能彰显网站的个性。首先我们来创建导航菜单,添加一个div,在该div中加入菜单图片,然后设定一个半径值,根据半径确定一个菜单图片运行的圆形轨迹,将图片看作圆形轨迹上的一个点,算出所有点下一时间在圆上的位置并将图片移动到该位置上,重复上面的移动过程,便实现了菜单的旋转,当然我们还会在旋转的过程中加入一些CSS滤镜效果,让旋转菜单看上去更加逼真。根据相同原理,我们还可以制作用于统计的圆形图饼等。
小知识:什么是CSS滤镜效果?
CSS滤镜主要是用来实现网页上图片的各种特殊效果的,如图片淡入淡出、图片翻转、图片阴影等,它对应的脚本特性为filter。虽然由于非IE浏览器对CSS滤镜支持不足,导致CSS滤镜只能在IE浏览器中能表现出较好的效果,但是仍不失为网页增加特效的好办法。
 
第一步:创建导航菜单
新建一个网页,在网页的<body></body>之间添加一个div,在该div中加入菜单图片并为div添加一个ID。相关代码如下所示:
<div id="imground">
<img class="point" src="imgs/img1.png"/>
<img class="point" src="imgs/img2.png"/>
<img class="point" src="imgs/img3.png"/>
<img class="point" src="imgs/img4.png"/>
<img class="point" src="imgs/img5.png"/>
<img class="point" src="imgs/img6.png"/>
<img class="point" src="imgs/img7.png"/>
<img class="point" src="imgs/img8.png"/>
</div>
第二步:设定菜单运行的圆形轨迹,计算各个菜单图片在圆上的位置
接下来我们需要确定菜单运行的圆形轨迹,根据半径值和图片的宽度计算出反正弦值,再根据该值的余弦我们便可以得到菜单图片在圆上对应的位置,在确定在圆上的位置的过程中,我们为菜单图片加入一些CSS滤镜效果,让旋转菜单看上去更加逼真。在<body></body>之间输入以下JavaScript代码:
 var r=200,dv=0.01,w=100,x=400;y=100,pn=8; //r半径,dv偏移量,w图片宽度,x菜单横坐标,y菜单纵坐标,pn菜单图片数量


    var pi=Math.PI,d=pi/2;
    var pd=Math.asin(w/2/r),ed=pi*2/pn,sm;//pd各个图片的反正弦
    function roundMove(){
  var v=document.getElementById('imground');
  var arrimg=v.getElementsByTagName('img');
  var o,ta,strFilter;
        for (var n=1;n<=pn;n++){
            o=arrimg[n-1];
            ta=Math.sin(d+ed*n);//获得当前偏移量的正弦值
   
            strFilter='';
            if (ta<0){//正弦值对应为负弧度,即图片旋转到圆的背面
    o.style.left=Math.cos(d+ed*n-pd)*r+x+'px'; //传入当前图片移动的横坐标
   }
            else{//当图片旋转到圆的正面时
    o.style.left=Math.cos(d+ed*n+pd)*r+x+'px';//传入当前图片移动的横坐标
   
   }
   
            o.style.top=ta*10+5+y+'px'; //传入当前图片移动的纵坐标
            o.style.width=Math.abs(Math.cos(d+ed*n+pd)-Math.cos(d+ed*n-pd))*r+'px';
            o.style.zIndex=parseInt(ta*10);
   
   
           if (o.style.zIndex<0){//当图片旋转到居后的位置时翻转图片
    strFilter='FlipH(enabled:true)';
   }
            else{ //当图片旋转到前面的位置时显示图片正面
    strFilter='FlipH(enabled:false)';
            }
   
   if (ta<0){
    ta=(ta+1)*80+20;
   }else{
    ta=100;
   }
   
            strFilter=strFilter+' alpha(opacity='+ta+')'; //透明效果(针对IE)
            o.style.opacity=ta/100; //透明效果(针对非IE)
            o.style.filter=strFilter; //在菜单图片上加入滤镜效果
        }
        d+=dv; //增加偏移值
    }
第三步:重复菜单图片移动的过程,形成旋转效果
我们利用定时执行函数来重复执行菜单图片移动过程来达到菜单的旋转效果。紧接第二步的代码输入以下JavaScript代码:

    function goR(){
        var o=document.getElementById('imground');
        var arrimg=o.getElementsByTagName('img');
        for (var n=0;n<arrimg.length;n++){
            arrimg[n].onmouseout=function(){sm=setInterval('roundMove()',50);} //鼠标离开菜单后继续转动
            arrimg[n].onmouseover=function(){clearInterval(sm)} //鼠标移上菜单停止转动
            arrimg[n].onmousedown=function(){dv=dv*2} //鼠标单击菜单加快转到速度
        }
        sm=setInterval('roundMove()',50);//定时重复执行移动函数
    }
goR();


延伸阅读:
div+css:tab风格导航
一个分页导航源码
很眩的半透明下拉菜单导航条
css做的一个很漂亮的分页导航
25个优秀的下拉菜单导航脚本
WML教程3:任务与导航-赋值与数据交换
再看七个经典jQuery网站导航脚本推荐
30 款下拉菜单导航菜单脚本欣赏
分享20款漂亮实用的WEB2.0导航菜单源码下载
常用的DIV+CSS导航条
jQuery导航菜单插件 AutoSprites
创建一个纯CSS的水平导航条
14 个很酷的 jQuery 导航菜单插件
简洁JQuery手风琴竖导航菜单
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号