2014-01-29 43 views
0

我有一些div元素,每個元素裏面都包含幾個div元素。所以我想讓這些div元素在懸停中生效。我不確定使用懸停或鼠標。例如,在懸停的div中,它必須運行一個向左移動或改變其顏色的動畫。但即使將鼠標移動到其他地方,效果也會保持不變,而這並不是我想要的。我希望它像css hover一樣工作,在mouseleave後面移動。 DEMO是否有切換懸停或mouseenter/mouseleave?

這裏是我的代碼:

$(document).ready(function(){ 
    $(".close").hide(); 
    $(".ln, .gw, .mc, .rt").hover(function(){ 
     var classname = $(this).parent(); 
     var name = $(classname).children(':first-child').next(); 

     $(name).animate({ 
      "margin-left": "100px"       
     }, 500); 

     $(classname).find(".close").fadeIn(500); 
    }); 
}); 

HTML

<div class="item1"> 
    <div class="name1 ln">name 1</div> 
    <div class="name2 ln">name 2</div> 
    <div class="name3 ln">name 3</div> 
    <div class="close">close</div> 
</div> 
<div class="item2"> 
    <div class="name4 gw">name 1</div> 
    <div class="name5 gw">name 2</div> 
    <div class="name6 gw">name 3</div> 
    <div class="close">close</div> 
</div> 
<div class="item3"> 
    <div class="name7 mc">name 1</div> 
    <div class="name8 mc">name 2</div> 
    <div class="name9 mc">name 3</div> 
    <div class="close mc">close</div> 
</div> 
<div class="item4"> 
    <div class="name10 rt">name 1</div> 
    <div class="name11 rt">name 2</div> 
    <div class="name12 rt">name 3</div> 
    <div class="close">close</div> 
</div> 

任何想法?

+1

這個http://jsfiddle.net/e3TeY/9/。 – DaniP

+0

@Danko感謝您的代碼看起來是迄今爲止最好的,如果您將其作爲答案發布,我會批准它。 – Daniel

+0

@Danko只是一個小問題。它只要我徘徊整個項目運作。我只能在物品的第二個div懸停時才能使其工作?! – Daniel

回答

0

你好,你可以先添加其他類上的所有項目,如.item瞄準每一個,然後只在第二個使用jQuery DIV,試試這個:

$(".item").each(function(){ 
    $(this).find('div').eq(1).hover(function(){ 
     var name = $(this); 
     $(this).toggleClass('active'); 
     if($(this).hasClass('active')){ 
      $(name).stop().animate({ 
      "margin-left": "100px"       
      }, 500); 
     } else { 
      $(name).stop().animate({ 
      "margin-left": "0"       
      }, 500); 
     } 
     $(this).parent().find(".close").stop(true,true).fadeToggle(500); 
    }) 
}) 

入住這Demo Fiddle

0

使用一個回調函數

$(document).ready(function(){ 
    $(".close").hide(); 
    $(".ln, .gw, .mc, .rt").hover(function() { 
     console.log('working'); 
     var classname = $(this).parent(); 
     var name = $(classname).children(':first-child').next(); 

     $(name).stop().animate({ 
      "margin-left": "100px"       
     }, 500); 

     $(classname).find(".close").fadeIn(500); 
    }, function() { 
     console.log('workign2'); 
     var classname = $(this).parent(); 
     var name = $(classname).children(':first-child').next(); 

     $(name).stop().animate({ 
      "margin-left": "0px"       
     }, 500); 
     $(classname).find(".close").fadeOut(500); 
    }); 

Demo

+0

感謝它與我想要的相似,但有兩個問題。如何在回調中淡出.close類?!其次,當我把它懸停時,有時它甚至還沒有完成動畫時就會回退,所以它看起來有點兒麻煩。有什麼辦法解決這些問題? – Daniel

+0

@ user3229902第一個音符通過添加「fadeOut」來解決......第二個音色無法重新創建。我添加了['.stop'](http://api.jquery.com/stop/)s,以便它不會排隊並在懸停停止時關閉。如果你不想要這樣的行爲,那就刪除'.stop' –

1

我會做這個

$(document).ready(function(){ 
    $(".close").hide(); 
    $(".ln, .gw, .mc, .rt").hover(function(){ 
     var classname = $(this).parent(); 
     var name = $(classname).children(':first-child').next(); 

     $(name).stop(); 
     $(name).animate({ 
      "margin-left": "100px"       
     }, 500); 

     $(classname).find(".close").stop(); 
     $(classname).find(".close").fadeIn(500); 
    }, function(){ 
     var classname = $(this).parent(); 
     var name = $(classname).children(':first-child').next(); 

     $(name).stop(); 
     $(name).animate({ 
      "margin-left": "0px"       
     }, 500); 

     $(classname).find(".close").stop(); 
     $(classname).find(".close").fadeOut(500); 
    }); 
}); 

如jQuery代碼。 固定它;)

+0

謝謝,它似乎在工作,但它不斷重複動畫幾次。這是爲什麼? DEMO >> http://jsfiddle.net/e3TeY/11/ – Daniel

+1

@ user3229902這是因爲如果沒有'.stop',動畫排隊等待之前停止的動畫開始前 –

+1

感謝Zach Saucier對禮貌的態度足夠解釋它,我已經改進了代碼,並希望它可以像user3229902想要的那樣工作 – Renze