Javascript 滑动导航菜单
先看看今天折腾 WordPress 的成果吧,请见我现在的导航菜单,鼠标移上去试试,滑动的哟,很帅吧。我知道有一个 lavalamp 的 JQuery 效果可以实现滑动导航菜单,不过我试了一下,需要改动太多的地方,而且代码并不是很简洁,违背了我用 JQuery 的初衷,所以放弃了。无意间又发现了一个相较而言比较精简的 Javascript 代码同样可以实现滑动导航的较果,小试一下,居然成功了。
方法来自一个老外的网站:http://www.leigeber.com/2008/05/sliding-javascript-menu-highlight-1kb/
下面是我自己的实践过程:
1、HTML 部分
<div class="menu">
<ul id="menu">
<li><a href="#">JavaScript</a></li>
<li><a href="#">Graphic Design</a></li>
<li><a href="#">HTML</a></li>
<li value="1"><a href="#">User Interface</a></li>
<li><a href="#">CSS</a></li>
</ul>
<div id="slide"></div>
</div>
<ul id="menu">
<li><a href="#">JavaScript</a></li>
<li><a href="#">Graphic Design</a></li>
<li><a href="#">HTML</a></li>
<li value="1"><a href="#">User Interface</a></li>
<li><a href="#">CSS</a></li>
</ul>
<div id="slide"></div>
</div>
2、Javascript 部分
var menuSlider=function(){
var m,e,g,s,q,i; e=[]; q=8; i=8;
return{
init:function(j,k){
m=document.getElementById(j); e=m.getElementsByTagName('li');
var i,l,w,p; i=0; l=e.length;
for(i;i<l;i++){
var c,v; c=e[i]; v=c.value; if(v==1){s=c; w=c.offsetWidth; p=c.offsetLeft}
c.onmouseover=function(){menuSlider.mo(this)}; c.onmouseout=function(){menuSlider.mo(s)};
}
g=document.getElementById(k); g.style.width=w+'px'; g.style.left=p+'px';
},
mo:function(d){
clearInterval(m.tm);
var el,ew; el=parseInt(d.offsetLeft); ew=parseInt(d.offsetWidth);
m.tm=setInterval(function(){menuSlider.mv(el,ew)},i);
},
mv:function(el,ew){
var l,w; l=parseInt(g.offsetLeft); w=parseInt(g.offsetWidth);
if(l!=el||w!=ew){
if(l!=el){var ld,lr,li; ld=(l>el)?-1:1; lr=Math.abs(el-l); li=(lr<q)?ld*lr:ld*q; g.style.left=(l+li)+'px'}
if(w!=ew){var wd,wr,wi; wd=(w>ew)?-1:1; wr=Math.abs(ew-w); wi=(wr<q)?wd*wr:wd*q; g.style.width=(w+wi)+'px'}
}else{clearInterval(m.tm)}
}};}();
var m,e,g,s,q,i; e=[]; q=8; i=8;
return{
init:function(j,k){
m=document.getElementById(j); e=m.getElementsByTagName('li');
var i,l,w,p; i=0; l=e.length;
for(i;i<l;i++){
var c,v; c=e[i]; v=c.value; if(v==1){s=c; w=c.offsetWidth; p=c.offsetLeft}
c.onmouseover=function(){menuSlider.mo(this)}; c.onmouseout=function(){menuSlider.mo(s)};
}
g=document.getElementById(k); g.style.width=w+'px'; g.style.left=p+'px';
},
mo:function(d){
clearInterval(m.tm);
var el,ew; el=parseInt(d.offsetLeft); ew=parseInt(d.offsetWidth);
m.tm=setInterval(function(){menuSlider.mv(el,ew)},i);
},
mv:function(el,ew){
var l,w; l=parseInt(g.offsetLeft); w=parseInt(g.offsetWidth);
if(l!=el||w!=ew){
if(l!=el){var ld,lr,li; ld=(l>el)?-1:1; lr=Math.abs(el-l); li=(lr<q)?ld*lr:ld*q; g.style.left=(l+li)+'px'}
if(w!=ew){var wd,wr,wi; wd=(w>ew)?-1:1; wr=Math.abs(ew-w); wi=(wr<q)?wd*wr:wd*q; g.style.width=(w+wi)+'px'}
}else{clearInterval(m.tm)}
}};}();
3、触发 Javascript
在<body>中添加如下代码:
<body onload="menuSlider.init('nav','slide')">
4、CSS 部分
样式部分根据不同的主题有不同的写法,但是有一个地方很关键,以第一步中的 HTML 为例,.nav ul 的 z-index 值一定要比 #slide 的z-index 值大。
补充说明,效果是很不错,但是唯一美中不足的是,我导航菜单中的“日志分类”页面本来是有二级菜单的,可是这么一整,二级菜单的效果木有了,郁闷。。。估计是 JS 冲突了,不知道哪位 JS 高手帮个忙给解决下,实在没办法,我明天又要继续折腾了,不完美不停歇!
-
WordPress 3.0 菜单功能支持二级菜单2010年08月29日 -
JQuery 实现动感导航菜单2010年02月25日 -
jQuery 水平拖动效果2011年03月4日 -
Wordpress 速度优化之 WP-PostViews 插件2011年02月9日
那个分享不错
看到你使用了这种功能,知道你这一定有教程!翻来翻去,被我发现了,不过对于我这菜鸟般的新手,这教程显得有点...你懂的!呵呵 (我还得在去翻翻)
呃。。。我写的还不是很复杂嘛,最复杂的已经精简了耶
现在的菜单有BUG,主要在二级菜单里面,第一次鼠标移上去之后,闪电般晃过,第二次鼠标移上去才会正常出行滚动效果。
这个情况只有在Firefox下有,其他浏览器下正常
好多代码啊 收藏不急
以后要用的来你这找~
哈哈,好好好,欢迎来
老万,把俺的博客地址更新一下
好的,已经更新咯~
确是搞的好看。我也想。。。
呵呵,这效果也是从别人那里批发过来的呢
嘿嘿。。。看起来确实比较有趣。。。
一指就一滚
恩,是的,只是在FF下好像还有点问题
额。。我用FF 3.6来看,似乎也可以用。。。哇嘎嘎
哈哈,那就好,我放心了
待到以后用WP的时候 万戈的博客应该是一个不错的学习资源站点。
那就快快加入WP大军吧
挺好的,谢谢分享
折腾的不错嘛
这代码也没见比lavalamp简洁到哪去啊~ 你看下博客侧边栏“系列专题”里的那篇感觉比你这个还短,试试lava还冲突不,毕竟是经典的代码呢
我之前就参考过你用的lavalamp,但是因为我的导航有二级菜单,lavalamp不能实现,唉,所以就放弃了
看了您的博客,非常想和您做个友情链接,不知道行不行。
最近很多淘宝客申请链接
看了您的博客,非常想和您做个友情链接,不知道行不行。
不好意思啊,暂不招链哦
自己写javascript,真厉害!
老万还真的会折腾。。。
我怎么没发现效果?
就在十分钟前被我去掉了。。。
我来的真是时候。。。
因为感觉还不完美,我在本地修改修改,整个完美版再拿出来秀
你的博客细节方面做的真不错,会写程序了就是不一样。
我只会小修小改,呵呵
这里编程javascript代码库了
PHP还没全学会又去折腾JS了,HOHO
貌似还不错~
可惜还不够完善
日志分类那里还有待加强哟,等待完整版出现
折腾了一个小时没折腾出来,今天再试试
呵呵,谢谢,欢迎常来呀
代码是挺少的。
不过,貌似“日志分类”的链接失效了
我用JQ的方法可以使分类日志复活,但是还有bug,继续折腾
发现万戈最近对技术很痴迷~!
春节长假不上班,研究技术容易上瘾啊!
哈哈,我一向对技术很痴迷哒,特别是有关WP的
挺有意思!
效果不是很理想呀,记得这滑动也有CSS实现方法的呢,不过貌似代码也很吭长~
还有待完善,昨天要睡觉了,就没折腾下去,今天go on
这个效果相比于lavalamp,滑动的速度是匀速,感觉很生硬。。还是lavalamp变速滑动感觉流畅点。。
可是lavalamp用起来比较麻烦。。。
不会啊,调用很容易的啊,一两行代码即可。。。
发现如果光标指向一个项目然后接着移开的话那个方块会很
地停在半路……明天是不是要贴一篇文介绍自动记住光标点过的位置好让方块过去的方法啊?
仅在日志页面会出现这个情况
这两天好疯狂啊,每天都有大动静……
还没看正文呢……
发现还没看正文呢……
霸屏了没?
霸了。。。
不能怪我啊……为啥还没有别人过来啊?
被我吓跑了?
我好水啊……接着来
接着盖,看看能连霸几楼
没天理了,再盖一层试试
地下室也占了……
星星呢?
坐地板~~
咋回事?
沙发?!
我人品这两天比较好啊,吼吼~