2016-04-20 39 views
0

js。 jQuery的。 有兩個大對象,其間有0px間隔。他們班是'.big'。有兩個小的對象,其類是'.small'。每個小物體位置都與一個'.big'物體發生碰撞。如果mouse_enter'.big'類對象,則funcStart();如果mouse_leave則funcStop()。 如果鼠標從'.big'對象轉到'.small',則會啓動funcStop(),因爲儘管'.small'對象位於'.big'之上,但鼠標仍然位於'.big'之外。 我需要'.small'上的鼠標懸停是活動的(按鈕),但funcStop()不需要運行,因爲鼠標在'.small'對象結束時也會超過'.big'對象。2層2 mouse_over

<div class=".big"></div> 
<div class=".small"></div> 
<div class=".big"></div> 
<div class=".small"></div> 

$(".big").mouseover(function(){ 
    funcStart(); 
}); 
$(".big").mouseout(function(){ 
    funcStop(); 
}); 

嘗試之類的東西:

$(".big").mouseout(function(){ 
    $(".small").mouseout(function(){ 
     var DONTSTOP = true; 
    }); 
    if(!DONTSTOP) { 
     funcStop(); 
    } 
}); 

這是工作,如果我使用的setTimeout(); ,但是這一次,當我們用鼠標從第一'.big'對象到第二'.big'對象函數funcStop();不要跑。從stackoverflow嘗試了很多。請幫忙。對不起英文。 謝謝。

+0

你真的需要退後一步,學習一些基礎知識。在第二組代碼中,每當鼠標離開'.big'元素時,就會創建一個新的監聽器。然後每當鼠標離開一個'.small'元素時,就會運行一個函數來設置一個新變量,然後立即將它拋棄。 DONTSTOP未定義爲外部函數。 – robisrob

+0

這只是一個例子。 var dontstop是在腳本開始時製作的。然後在離開設置值,然後在超時checked.i嘗試了很多,這一天被這個問題殺死:)我只打印抽象的東西,從我試過的所有方法。從dinamicaly生成的代碼中抽取了一個醜陋的例子。 :)但是,基本面,我需要重複。另外感謝;) – open5ource

回答

0

我認爲你的問題是兄弟姐妹vs孩子。看看這個草圖顯示行爲的差異。如果嵌套div不是孩子,那麼鼠標確實會離開外部元素。它必須是鼠標留下的孩子。缺點是如果元素擴展出來,那麼你的鼠標也會被擴展。

<div class ="big">1 big sibling.</div> 
<div class ="small">2 small sibling.</div> 

<div class ="big">3 big parent. 
    <div class = "small">4 small child.</div> 
</div> 

http://codepen.io/anon/pen/RaJEOo

+0

哦,謝謝。已經嘗試過之前的孩子div,並沒有看到它的工作:))或只現在開始這個工作。 :)它現在的作品:)謝謝。 – open5ource

+0

也是@pwroff是正確的mouseover是錯誤的事件 – robisrob

0

我會建議你使用mouseenter/mouseleave事件,而不是。原因是mouseover和mouseout在光標周圍移動光標時發生了幾次,這可能會導致不需要的行爲。

那麼試試這個:

<div class=".big"></div> 
<div class=".small"></div> 
<div class=".big"></div> 
<div class=".small"></div> 

$(".big").mouseenter(function(){ 
    funcStart(); 
    $(".small").on('mouseenter', function(){//Do Your Magic, Mouse is over the .small}); 
    $(".small").on('mouseleave', function(){//Do Your Magic, Mouse retuned to .big}); 
}); 
$(".big").mouseleave(function(){ 
    funcStop(); 
}); 
+0

是的,以前所有這些方法都嘗試過:mouseover,mouseenter,hover ...........但問題出在孩子身上(但是我在這之前試過這一切沒有工作)或我沒有檢查almoast好,當試圖mouseenter + child.div) – open5ource

+0

真的,在你的情況下,funcStop()將在鼠標將進入之前觸發.small div –

+0

沒有孩子.div mouseleave也不給出了結果:)謝謝,夥計們:) – open5ource