Jquery 悬停 - 允许悬停在另一个 DIV 按钮悬停时出现
Jquery Hover - allow hover on another DIV the appears on hover of a button
我的主页有 4 个按钮。将鼠标悬停在按钮上时,按钮后面会出现一个菜单。当您将鼠标悬停在另一个按钮上时,会出现一个不同颜色的菜单。
目前,我可以获得显示菜单的按钮,但是当我将鼠标悬停在菜单上(然后悬停在按钮上)时,我失去了菜单。
这是我的简单代码:
Jquery 在顶部:
$(".mybutton").hover(
function () {
$(".mybox").fadeIn();
},
function () {
$(".mybox").fadeOut();
}
);
$(".mybutton2").hover(
function () {
$(".mybox2").fadeIn();
},
function () {
$(".mybox2").fadeOut();
}
);
还有我的 HTML:
<div class="mybox">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
<div class="buttons">
<div class="mybutton">
/* Button image here */
</div>
<div class="mybutton2">
/* Button 2 image here */
</div>
</div>
所以我需要一些方法来使鼠标悬停时淡入淡出的框保持活动状态。我正在考虑不对淡出进行回调,并且只在它们从 .mybox DIV 淡出或者将鼠标悬停在另一个按钮上时才进行淡出。但是我有点不清楚如何做到这一点。
提前致谢。
这是因为您不再将鼠标悬停在按钮上而是转到另一个元素 "mybox" 因此您可以通过将菜单保留在按钮中来重新排列 html 结构以使其正常工作class 像这样:
<div class="buttons">
<div class="mybutton">
/* Button image here */
<div class="mybox">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
</div>
</div>
只要光标在里面,菜单就会保持活动状态。
出于各种原因(其中之一是实现它的复杂性),我不建议将此作为 UI 设计模式;您可以改为考虑更改它,以便在用户单击时显示菜单。
话虽如此,这里有一种方法可以做到。删除现有的 fadeOut()
调用并添加:
$("body").on("mousemove", function(e) {
var $hovered = $(e.target);
var $myButton = $(".myButton");
var $box = $(".myBox");
if ( $hovered.is( $myButton ) ) return;
if ( $hovered.is( $box ) ) return;
if ( $.contains( $box.get(0), $hovered ) ) return;
$box.fadeOut();
});
...和 button2 类似。基本原理是这样的——每当鼠标移动时,我们检查鼠标是否悬停在按钮、框或框内包含的元素上(使用 $.contains()
)。如果不是,我们隐藏框。
您需要将菜单和按钮包含在容器内,并在容器上设置悬停事件。这样,只要您将鼠标悬停在容器上,您的菜单就会可见。
这是您需要做的。
像这样用你的菜单和按钮声明容器。
<div id='container'>
<div class="mybox box">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
<div class="buttons">
<div class="mybutton">
/* Button image here */
</div>
</div>
</div>
这是您需要在 jquery 中执行的操作。
$(document).ready(function() {
$("#container").hover(
function() {
console.log($(".mybox").fadeIn());
$(".mybox").fadeIn();
},
function() {
$(".mybox").fadeOut();
}
);
});
这是一个有 2 个按钮的 JSFIDDLE
我的主页有 4 个按钮。将鼠标悬停在按钮上时,按钮后面会出现一个菜单。当您将鼠标悬停在另一个按钮上时,会出现一个不同颜色的菜单。
目前,我可以获得显示菜单的按钮,但是当我将鼠标悬停在菜单上(然后悬停在按钮上)时,我失去了菜单。
这是我的简单代码: Jquery 在顶部:
$(".mybutton").hover(
function () {
$(".mybox").fadeIn();
},
function () {
$(".mybox").fadeOut();
}
);
$(".mybutton2").hover(
function () {
$(".mybox2").fadeIn();
},
function () {
$(".mybox2").fadeOut();
}
);
还有我的 HTML:
<div class="mybox">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
<div class="buttons">
<div class="mybutton">
/* Button image here */
</div>
<div class="mybutton2">
/* Button 2 image here */
</div>
</div>
所以我需要一些方法来使鼠标悬停时淡入淡出的框保持活动状态。我正在考虑不对淡出进行回调,并且只在它们从 .mybox DIV 淡出或者将鼠标悬停在另一个按钮上时才进行淡出。但是我有点不清楚如何做到这一点。
提前致谢。
这是因为您不再将鼠标悬停在按钮上而是转到另一个元素 "mybox" 因此您可以通过将菜单保留在按钮中来重新排列 html 结构以使其正常工作class 像这样:
<div class="buttons">
<div class="mybutton">
/* Button image here */
<div class="mybox">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
</div>
</div>
只要光标在里面,菜单就会保持活动状态。
出于各种原因(其中之一是实现它的复杂性),我不建议将此作为 UI 设计模式;您可以改为考虑更改它,以便在用户单击时显示菜单。
话虽如此,这里有一种方法可以做到。删除现有的 fadeOut()
调用并添加:
$("body").on("mousemove", function(e) {
var $hovered = $(e.target);
var $myButton = $(".myButton");
var $box = $(".myBox");
if ( $hovered.is( $myButton ) ) return;
if ( $hovered.is( $box ) ) return;
if ( $.contains( $box.get(0), $hovered ) ) return;
$box.fadeOut();
});
...和 button2 类似。基本原理是这样的——每当鼠标移动时,我们检查鼠标是否悬停在按钮、框或框内包含的元素上(使用 $.contains()
)。如果不是,我们隐藏框。
您需要将菜单和按钮包含在容器内,并在容器上设置悬停事件。这样,只要您将鼠标悬停在容器上,您的菜单就会可见。
这是您需要做的。 像这样用你的菜单和按钮声明容器。
<div id='container'>
<div class="mybox box">
<div style="position: absolute;">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
<div class="buttons">
<div class="mybutton">
/* Button image here */
</div>
</div>
</div>
这是您需要在 jquery 中执行的操作。
$(document).ready(function() {
$("#container").hover(
function() {
console.log($(".mybox").fadeIn());
$(".mybox").fadeIn();
},
function() {
$(".mybox").fadeOut();
}
);
});
这是一个有 2 个按钮的 JSFIDDLE