我正在尝试更改lavalamp菜单上文字的颜色我正在使用以下插件http://www.queness.com/post/530/simple-lava-lamp-menu-tutorial-with-jquery
我所做的是以下
$('#lava').mouseleave(function () {
$('#lava li').removeClass('selected');
$('#lava li').css({color: '#FFF'});
//select the current item
$(this).addClass('selected');
$(this).css("color", "white");
});
然而,当鼠标离开时,它将所有文本更改为黑色,这是正确的,但然后$(this)不会更改为白色
这是代码和工作演示的副本
答案 0 :(得分:1)
我想你所追求的是:
基本上你的mouseleave功能必须看起来像这样
$('#lava').mouseleave(function () {
left = Math.round($(".selected").offset().left - $('#lava').offset().left);
width = $(".selected").width();
//Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left: left},{duration:1000, easing: style});
$('#box .head').stop(false, true).animate({width:width},{duration:1000, easing: style});
});
请注意,我还为样式表中的链接添加了颜色定义:
#lava ul a li { color:#fff; }
(您是否知道像li
这样的内联元素中包含a
等块级元素仅在HTML5中有效?)
至于菜单文字的颜色,我还修改了$('#lava li').hover(function ())
:
$('#lava li').hover(function () {
//Get the position and width of the menu item
left = Math.round($(this).offset().left - $('#lava').offset().left);
width = $(this).width();
$(this).css("color","black");
//Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left: left},{duration:1000, easing: style});
$('#box .head').stop(false, true).animate({width:width},{duration:1000, easing: style});
//if user click on the menu
},function() { $(this).css("color","white");}).click(function () {
//reset the selected item
$('#lava li').removeClass('selected');
//select the current item
$(this).addClass('selected');
});
答案 1 :(得分:0)
代码几乎肯定不正确。关键词'this'是一个神奇的野兽,它可以改变方式,这对于习惯于其他语言的程序员来说非常令人惊讶。
首先阅读本文以了解'this'是什么以及如何修改它。
http://howtonode.org/what-is-this
然后使用jquery函数代理(http://api.jquery.com/jQuery.proxy/)将“this”封装到函数中。
$('#lava').mouseleave($.proxy(function () {
$('#lava li').removeClass('selected');
$('#lava li').css({color: '#FFF'});
//select the current item
$(this).addClass('selected');
$(this).css("color", "white");
}, this));
答案 2 :(得分:0)
尝试让它在每个li的悬停上改变颜色
// the follow preforms for loop on your li's
$("#lava li").each(function(i) {
// this is the "hover" function, aka, mouseenter and mouseleave
$(this).hover(function(eIn) { // this function allows you to do stuff while mouse is over object
$(this).addClass('selected').css("color", "#FFF"); // FFF is white
},
function(eOut) { // this allows you to do stuff when mouse leaves object
$(this).removeClass('selected').css("color", "#000"); // 000 is black
});
});