自码 LavaLamp 滑动效果

滑动门里 LavaLamp 可以算应用广泛使用也比较容易的jQuery插件了。

昨晚 @万戈 童鞋写了篇滑动,jQuery部分看了尝试精简了下,还真成了:DEMO

折腾完之后受此启发,有了码一个 LavaLamp 效果的基本思路,刚又整理完善了下基本搞定完成。

html结构部分,WordPress自定义导航生成,已去除无关代码:

 
<ul id="menu-menu">
 
	<li class="current-menu-item"><a>首页</a></li>
 
	<li class=""><a>折腾</a></li>
 
	<li class=""><a>生活</a></li>
 
</ul>

css部分,其中huad里的样式就是滑动的那块样式,高度什么的得自行调整:

 
#menu-menu{position:relative;}
 
#menu-menu li a{position:relative;z-index:2;}
 
#menu-menu .huad{height:30px;border-top:2px solid #1BA1E2;border-bottom:2px solid #1BA1E2;position:absolute;top:0px;z-index:1;}

jQuery核心代码:

 
//By ImMmMm.com
 
var mm=$('#menu-menu');  //一般只需修改这儿的ID
 
var mmc=mm.find('.current-menu-item');  //获取需要高亮的对象,current-menu-item为WordPress自定义导航生成
 
var mml=mmc.position().left;  //高亮对象相对父级元素的左边距
 
var mmw=mmc.width();  //获取高亮对象的宽度
 
mm.append("<li class='huad' style='left:"+mml+"px;width:"+mmw+"px'></li>");  //追加滑动样式的html代码,并设定宽度和左边距
 
var mmh=mm.find('.huad');  //获取滑动对象
 
mm.children('li').hover(function(){  //此导航下li鼠标移上去的事件
 
	var anm=$(this).position().left;  //此子项相对父级元素的左边距
 
	var anw=$(this).width();  //此子项的宽度
 
	mmh.animate({left:anm,width:anw},{queue:false,duration:300});  //滑动对象左边距和宽度的自定义动画,300毫秒内触发一次
 
	},function(){  //鼠标移开事件
 
	mmh.animate({left:mml,width:mmw},{queue:false,duration:300});  //滑回
 
});

上课去鸟,下面几句回来再注释,各位童鞋先看看呗~

19:04 蹭饭归来。继续。

代码还是注释文字多咯,此效果有个BUG:中途浏览器宽度变化,滑动就会错位。原因也明显,最初的左边距是页面打开时就获取了,这个问题就留给有能力的童鞋搞定了~换用.position()相对父级元素获取左边距,完美解决浏览器滚动条影响之前.offset()相对浏览器的左边距问题~

PS:效果可能需要强制刷新下才能见到,关于文章页没效果,这个也好理解,jQuery是判断WordPress自定义导航有current-menu-item高亮时才匹配的,So…

主机格调
  1. 西门
    四月 26, 2011 15:03:15 #5

    首页有BUG,文章页导航根本没效果

    • 文章页本来就没有高亮的样式撒~

  2. 木木就是个“优化精简器” :twisted:

    • 其实原来的lavalamp已经够精简了,功能也比我这个强悍,兼容性也好~

  3. ISayMe
    四月 26, 2011 15:34:15 #7

    还是前排,准备按照思路鼓捣一番.哈哈 :mrgreen:
    文章页确实没有效果哦 首页效果很赞.

    • 无冷
      四月 26, 2011 15:54:15

      估计是js只能在首页使用,文章页不能使用

  4. 奇奇
    四月 26, 2011 16:09:16 #8

    嗯 兼容性优待提高呵呵 好几个浏览器的效果都不太一样 ie6都没算在内哦 :idea:

    • IE6没测试无视之,其它应该没问题吧?

  5. Ben
    四月 26, 2011 16:45:16 #9

    opera下有1px错位

  6. evil
    四月 26, 2011 16:46:16 #10

    :idea: 看来我的博客程序也可以用,只有首页能滑饿

    • 有当前高亮的样式就可以~

  7. 小羿
    四月 26, 2011 17:15:17 #11

    效果还是不错的

    • 限定了下高度,现在OK了吧?

      • 嗯嗯~ 这个轻量级大概可以应用到边栏等有固定class的地方。

        如果改成判断menu-item-home的话不知道可不可以在文章页高亮首页……

  8. 我只是来看demo的,完全不懂代码

  9. 好复杂,不明白,码盲一个呢 :eek:

  10. lms
    四月 26, 2011 19:18:19 #15

    这个非常华丽! :razz:

    • 哈,兼容性现在也么打问题了~

  11. mopvhs
    四月 26, 2011 21:16:21 #16

    加了这个就很灵动了~~

    • 很早想加来着,不过就是不想用那jQuery插件,自己写爽~

  12. Melody
    四月 26, 2011 21:26:21 #17

    额。。。lavalamp核心好像就一句话的样子, :mrgreen: :mrgreen: 不过,好东西,收了

    • 当练手呗,自己写的思路清晰些~

  13. 奚少
    四月 26, 2011 22:17:22 #18

    好东西啊,效果太强悍了! :idea:

  14. cgons
    四月 26, 2011 22:40:22 #19

    :grin: 学习了,支持 !

  15. Maplews
    四月 26, 2011 22:57:22 #20

    这玩意儿~ 真挺酷的

  16. ISayMe
    四月 27, 2011 00:15:0 #21

    请问博主,能不能让这个背景颜色滑动到字体上面的时候使得字体改变颜色呢?由于我的颜色基本上都是黑色和白色.
    要是使用了这个函数,使背景滑动的话,黑色的背景滑动到字体上,字体(本身是黑色的)就看不见了. 我用css设置放上鼠标后字体颜色变白,然后黑色背景滑动到上面,但是,字体变白是瞬间完成的,黑色背景滑动到上面是要一定时间的,因此这段时间放上鼠标的字体就透明了. 请问博主有什么好的解决方法吗?不怎么会修改这个函数,所以又来请教博主啦.
    可能说的不清楚,请博主到我那里看看吧.不好意思了.

    • 这个就得你用css解决了~这个jQuery效果没有控制的

      • ISayMe
        四月 27, 2011 10:11:10

        多谢博主解答 了.看来我要改变一下导航栏的样式了…

  17. Melody
    四月 27, 2011 18:26:18 #23

    可能还要完善,一个模块滑动到另一个模块的时候会往回返回一小下,看着有点别扭额

    • 获取的是当前li对象,导航一个个中间是有空隙的~

  18. Microhu
    四月 28, 2011 04:12:4 #24

    厉害. 如果不是使用的wordpress自定义菜单,怎么弄呢? :wink:

    • 得用php端判断高亮哪个,就是给当前导航加一个current样式~

  19. 之前我也折腾过,因为JQ太菜,玩不起。。。
    不知道你这个能自适应菜单的长度吗?

  20. 森西
    四月 30, 2011 07:34:7 #26

    对我没神马用,皮肤什么的,都是浮云,简洁就好~ :mrgreen:

  21. 这个可以用上,嘿嘿~~ :shock:

  22. 西门
    五月 3, 2011 11:35:11 #28

    var mml=mmc.position().left;
    不知道是不是这句有问题,写alert,这个地方无效。后面也加不上huad这个类的HTML代码

    • 没获取到.current-menu-item这个吧~

      • 西门
        五月 3, 2011 14:09:14

        为什么没有获取到呢?我HTML代码是复制你的呀。

        • 那个当前页的样式是WordPress3.0自定义导航生成的~

          • 西门
            五月 3, 2011 20:28:20

            你没理解我的意思。我按照你写的代码写DEMO,无效。如果你不忙的话,写个DEMO放出来吧 :grin:

            • 还是把你写的demo让我看吧~

              • 西门
                五月 3, 2011 20:37:20

                我自己的错,居然没加$(function((){});….

  23. 析析
    五月 13, 2011 16:46:16 #29

    我本是想学点东东的,后来却打了酱油~!

  24. Jav2me
    三月 19, 2012 01:42:1 #30

    貌似这个lavalamp的js和一些插件的js冲突?
    例如这个例子,我在本地测试的。
    1,搭建新的wordpress
    2,安装了iNove主题
    3,安装了插件WP Facebox download,这个插件的效果有点像之前Highslide4WP的弹出一个窗口那样。
    可以参考这里的效果显示:
    http://www.aedes.us/f/iIqN0.png

    4,修改footer.php文件,在body结束标签之前添加加载lavalamp.js的代码(这个时候没把lavalamp.js放进js文件夹,插件的效果还是好的)
    5,把lavalamp.js放进js文件夹,lavalamp效果出现,插件效果就出错了。。。
    显示如图:
    http://www.aedes.us/f/wsdLX.png

    希望木木能给与指点,貌似是这个插件的JS和lavalamp的JS冲突,可是我对JS一窍不通,不知道如何着手去解决这个问题。

    • 就是说不丢入js文件夹,单独加载是OK的咯?这肯定是我的js代码没有封闭,导致命名冲突造成的……

      • Jav2me
        三月 19, 2012 22:06:22

        已经解决了,用了easing的标准格式修改了js文件:)

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">