2012-08-25 87 views
0

我已阅读关于此问题的其他问题和答案,但它们不适用于我,也许我错过了某些内容,或者我的示例稍有不同,我不知道。无论如何,我有一个文本和链接里面的div,我想创建一个新的div当用户悬停在这第一个div。问题是,当我结束第一个div时,第二个连续淡入淡出,即使我没有用鼠标离开第一个div。徘徊在div上的重复动画

下面是HTML代码:

<div id="content"> 
    <h1>Portfolio</h1> 
     <div id="web"> 
      <p>Web apps</p> 
      <a href="#"> 
       First link 
      </a> 
     </div> 
     <div id="commentweb"> 
      <p>The text that I want to show</p> 
     </div> 
</div> 

,这是jQuery的:

$(document).ready(function() { 

$("#web").click(function(){ 
    window.location=$(this).find("a").attr("href"); 
    return false; 
}); 

$("#commentweb").hide(); 

$("#web").hover(
    function() { 
    $(this).children("a").children("img").attr("src","2.png"); 
    $(this).css("background-color","#ecf5fb"); 
    $(this).css('cursor', 'pointer'); 
    $(this).css('border','1px solid #378ac4'); 
    $(this).children("p").css("opacity","1.0"); 
    $('#commentweb').stop(true, true).fadeIn(); 
    }, 
    function() { 
    $(this).children("a").children("img").attr("src","1.png"); 
    $(this).children("p").css("opacity","0.5"); 
    $(this).css("background-color","#e8e3e3"); 
    $(this).css('border','1px solid grey'); 
    $('#commentweb').stop(true, true).fadeOut(); 
    } 
); 
}); 

我应该怎么做才能在动画褪色我在#web和淡入淡出时开始当我离开那个div时没有闪烁(即不断fadeIn和fadeOut)?

我已经添加了一个小提示向您展示问题:http://jsfiddle.net/mMB3F/ 它基本上发生在我悬停在文本上时。

+2

哎。你在*那里得到了很多'$(this)'。为什么不'var $ self = $(this)'然后使用'$ self'?并使用'$ self.css({cursor:'pointer',border:'...',...})'。 –

+1

@JaredFarrish - 或者只是将所有这些方法链接到一个选择器表达式? – adeneo

+0

谢谢你们,我会链接css命令。 – user1301428

回答

1

发生此问题的原因是您的注释div位于您正在分配悬停事件的div内。请注意,当您在下图中显示的高亮区域(红色)中输入鼠标指针(与注释div相关)时,会发生闪烁。

enter image description here

采取这种解决方案来看看:现在http://jsfiddle.net/davidbuzatto/mMB3F/1/

注释div有一个绝对定位。当鼠标进入时,注释div将显示在指针旁边。当然,现在您需要更改代码以适应您的需求。这样做的另一种方法是设置一个封闭#web div的div容器,并将另一个div放在它旁边,使它们浮动。在新的div里面插入带注释的div。

+0

你发布的作品,但我不明白为什么你必须改变jQuery代码,你能解释一下吗? – user1301428

+0

@ user1301428:我改变了它只是为了使用鼠标指针坐标重新定位注释div。你可以将它的位置设置为一个静态值,也可以使用'left'和'top'属性在css中更改'.comment'类。 – davidbuzatto

+0

谢谢,但你能告诉我为什么它不起作用,如果我粘贴我的jQuery代码在你的例子?它只适用于我离开你的jQuery代码。 – user1301428

0

使用jquery .mouseenter().mouseleave()来避免这种情况。 这样,你不必重新定位你的CSS中的任何东西。

看到我的回答here更多细节

+0

我也试过,但问题依然存在。你可以在这里看到更新的小提琴:http://jsfiddle.net/mMB3F/4/ – user1301428

1

更新

我对方的回答有点太浮夸,你只需要浮动的其他分区

#commentweb {float:left} 

http://jsfiddle.net/mMB3F/5/

它需要是异步的,stop()是是什么导致它眨眼,但如果您只是在分配事件处理程序之前等待淡出完成,则不需要停止。

http://jsfiddle.net/u7Q9P/1/