一个页面有4个div:
所需的效果是,当将鼠标悬停在“项目”框上时,将显示“详细信息”框,并在鼠标移出后隐藏。显示时,“详细信息”框将与“项目”框右侧的约20%重叠。
然而,我得到的当前错误效果是,当我将鼠标悬停在任何Item框的右边缘时,它会进入显示和隐藏Details框的永久循环。大概这是因为它触发了Item框的mouseout事件(当显示Details时),但是当隐藏Details按钮时立即再次触发mouseover事件。我想知道如何解决这个问题。
我目前的代码是:
$('div.item').hover(
function() {
$(this).showDetails();
},
function() {
$(this).hideDetails();
}
);
提前感谢任何指针! 这是任何无法想象它的人的jsfiddle链接。尝试将鼠标悬停在右侧的“项目”框上,然后稍微移动鼠标,您将看到闪烁发生。
Xavier,我已经尝试了appendTo的详细信息框,但我想要的效果是我想让鼠标事件只针对可操作的div(即Item)。经过一些研究后,我甚至非常确定这是否可行,因为“详细信息”框覆盖了div(因此无法将事件附加到其下方)
答案 0 :(得分:1)
一个解决方法是让细节DIV成为您正在悬停的项目的子项。这样,当指针在细节DIV上方时,指针仍然处于正确的项目中,并且在鼠标离开两个 DIV之前不会发送mouseout。你至少可以用两种方法做到这一点:
你必须做一些CSS技巧才能让它显示出你想要的东西,但只要父子关系存在,你就不必担心错误的鼠标事件。
希望这有帮助!
答案 1 :(得分:0)
我无法直观地查看您的问题。目前还不清楚详细信息框在所有情况下是否看起来相同,页面上的项目div在哪里,以及彼此之间的关系。
请为此创建JSFiddle并在其中粘贴一些CSS,HTML和JS。然后我可以看看。
答案 2 :(得分:0)
试试这个:
我认为这就是你要找的:
<强> HTML:强>
<div class="divItem" style="width:50px;height:50px;background-color:#FFEFC6">Item A</div>
<br />
<div class="divItem" style="width:50px;height:50px;background-color:#FFEFC6">Item B</div>
<br />
<div class="divItem" style="width:50px;height:50px;background-color:#FFEFC6">Item C</div>
<div id="divMove" style="width:100px;height:100px;background-color:#D9E9D0;display:none">
</div>
<强> JAVASCRIPT:强>
$(".divItem").mousemove(function(e){
var left = e.pageX + 10 + "px";
var top = e.pageY + 20 + "px";
$("#divMove").show().css("top",top).css("left",left).css("position","absolute");
}).mouseout(function(){
$("#divMove").hide();
}).mouseenter(function(){
$("#divMove").text($(this).text());
});
<强> CLICK HERE TO SEE THE SAMPLE 强>
答案 3 :(得分:0)
特别是因为你正在使用hover(),听起来有点像你遇到了一个非常简单的问题。
我确定你试过停止(真实,真实)对吗?
//
$('div.item').hover(
function() {
$(this).stop(true, true).showDetails();
},
function() {
$(this).stop(true, true).hideDetails();
}
);
//