2012-12-18 124 views
0

我有两个div:红色的蓝色。 我想当用户将这个fadeOut悬停在红色并且当悬停在背景(当他突然出现蓝色时)红色淡入。 (更令人惊讶的是,当我徘徊在背景中但当我将鼠标移到背景上时,红色褪色了吗?我不明白)悬停和切换jQuery

这里的例子生活:http://jsfiddle.net/DpD8S/

HTML:

<div id="background"> 
    <div id="red"></div> 
    <div id="blue"></div> 
</div>​ 

CSS:

#red{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:red; 
    cursor: pointer; 
    z-index: 1; 
    } 

#blue{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:blue; 
    cursor: pointer; 
    } 

#background{ 
    position: relative; 
    margin: 0 auto; 
    width:300px; 
    height: 300px; 
    border: 1px solid; 
    border-color:#CCC; 
    text-align: center; 
    cursor: pointer; } 

JQUERY:

$(function(){  
    $("#red").hover(function() { 
     $("#red").fadeOut(); 
    }); 

    $("#background").hover(function() { 
     $("#red").fadeIn("normal"); 
    }); 
})​ 
+1

如果我理解正确的话,的jsfiddle就像你所描述的 – dualed

+0

“我想,当用户将鼠标悬停在红色,这种淡出当悬停在背景中,红色淡入“现在,当我将鼠标悬停在背景上时,红色不会淡入。我不明白为什么? – Nrc

+0

我想我明白了...... – dualed

回答

1

做一个透明的稳定区域,它会捕获你的事件。

<div id="background"> 
    <div id="blue"></div> 
    <div id="red"></div> 
    <div id="transparent"></div> 
</div>​ 

CSS:

#red{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:red; 
    cursor: pointer; 
    z-index: 1; 
    } 

#blue{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:blue; 
    cursor: pointer; 
    } 

#transparent { 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:none; 
    cursor: pointer; 
    z-index: 2; 
    } 

#background{ 
    position: relative; 
    margin: 0 auto; 
    width:300px; 
    height: 300px; 
    border: 1px solid; 
    border-color:#CCC; 
    text-align: center; 
    cursor: pointer; 
} 
​ 

然后使用悬停(函数(),()的函数)。不要忘了停止执行事件的功能有:

$(function(){  
    $("#transparent").hover(function() { 
     $("#red").stop().fadeOut(); 
    }, function() { 
     $("#red").fadeIn("normal"); 
    }); 

})​ 

http://jsfiddle.net/DpD8S/14/

+0

这个问题可以解决而不添加无用的元素到' DOM'。 –

+0

这是一个聪明的解决方案,它在小提琴中工作。因为这是一个非常简单的例子,我遇到了很多div。我不确定我是否能够在那里应用它。无论如何,它给了我一个新的可能性。谢谢!! – Nrc

+0

这是我最喜欢的选择,因为它适用于任何情况,如果div的大小或位置不一样,都无关紧要。我也尝试过使用mouseenter和mouseleave的变体:http://jsfiddle.net/DpD8S/22/ – Nrc

2

您的问题可能是hover的定义。

hover(handlerIn(eventObject) , handlerOut(eventObject) ) 
hover(handlerInOut(eventObject) ) 

这意味着当你通过只有一个功能,它被称为为mouseenter以及mouseleave。您应该使用这些事件或通过两项功能hover

此外,这是非常“倒退”。当你进入它时隐藏东西将永远是一个问题。所以这就是为什么我现在重命名你的div。当您输入#inactive时应显示#active,并且当您离开#active时应隐藏#active

这里有一个小提琴http://jsfiddle.net/MwQaf/1/

+0

@Nrc这是因为当你隐藏红色时你“输入”蓝色。如果您将第二个处理程序附加到'#background'的'mouseenter'处理程序,它应该可以工作 – dualed

+0

您的意思是?:http://jsfiddle.net/DpD8S/13/您可以直接在小提琴中尝试。我认为这是行不通的 – Nrc

+0

@Nrc我在那儿有点仓促。我更新了我的答案,使用它。 ;) – dualed

1

也许你宁愿改变: $("#background").hover(...)$("#blue").mouseleave(...)

http://jsfiddle.net/DpD8S/18/

+0

你说的是一个很好的解决方案。但要小心你的小提琴不起作用。我认为你是这个意思?:http://jsfiddle.net/DpD8S/18/ – Nrc

+0

是的,抱歉,谢谢你指出。 – IsisCode

+0

这是一个非常好的解决方案,因为它非常简单明了。但我认为它只会起作用2个div具有相同的确切大小和位置。 – Nrc

0

悬停功能通常是这样定义 -

$('#red').hover(function() { 
    $(this).fadeOut(); 
}, function() { 
    $(this).fadeIn(); 
}); 

第一个函数是.hover()的mouseenter部分。第二个功能是悬停的mouseleave部分。在你的情况下,背景div似乎对问题无关紧要。

+0

我在这里尝试它,它会造成一种异常的影响:http://jsfiddle.net/DpD8S/12/ – Nrc

+0

奇怪。我会和@Remi Breton的答案一起去,在那里他将功能分开。我没有想到悬停反应这种方式。 –

1

#backgrounddiv正在包装另外两个。 $('#background').hover()函数被调用,每当hover事件发生在#background,甚至其子女。

我相信你可以achieve what you want by doing this

$("#red").mouseenter(function() { 
    $(this).fadeOut(); 
}); 

$("#red, #blue").mouseleave(function() { 
    $("#red").fadeIn("normal"); 
}); 

然而,这会产生一个奇怪的行为,因为这两个“变脸”动画排队。如果用户快速进入和退出,div似乎没有反应,并以怪异的方式进行动画处理。

如果安装插件是一个选项,你可以try this plugin to animate colors。这将使您甚至可以将元素数量减少到div本身。您还可以削减CSS并使用更清晰的JavaScript。 Check out the fiddle

+0

你说的话有道理,但你的例子在mouseleave上做了一些奇怪的动作。我试图添加event.stopPropagation(),但它也没有工作:http://jsfiddle.net/DpD8S/16/ – Nrc

+0

我只是想到了这一点;有什么理由为什么CSS3不能用于你的情况? –

+0

奇怪的行为是由'#red'元素在'fadeIn()'开始之前完成'fadeOut()'动画引起的。 –