2016-04-20 97 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