2012-08-25 125 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/