如何使用 jQuery 将鼠标悬停在 div 上时显示覆盖 div?

发布于 2024-12-11 11:18:38 字数 182 浏览 1 评论 0原文

我想在悬停的 div 顶部显示一个覆盖 div,类似于 IBM 网站上的此效果: http: //www.ibm.com/us/en/

请查看页脚附近的 3 个框。将鼠标悬停在“让我们建设一个更智能的星球”框上即可查看效果。

I want to show an overlay div sitting on top of the hovered div similar to this effect on IBM website: http://www.ibm.com/us/en/

Please look at the 3 boxes near the footer. Hover on the box "Let's build a smarter planet" to view the effect.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

枕头说它不想醒 2024-12-18 11:18:38

我创建了一个工作示例。基本上,您需要创建 3 个带有可见和不可见容器的 div,添加悬停事件处理程序并在该处理程序中切换工具提示的可见性。

HTML:

<div class="parents">
    <div class="box type-1">box 1</div>
    <div class="tooltip type-1">tooltip 1</div>
</div>

<div class="parents">
    <div class="box type-2">box 2</div>
    <div class="tooltip type-2">tooltip 2</div>
</div>

<div class="parents">
    <div class="box type-3">box 3</div>
    <div class="tooltip type-3">tooltip 3</div>
</div>

CSS:

.parents
{
    float: left;
    margin: 5px;
}

.box,
.tooltip
{
    width: 80px;
    height: 30px;
    line-height: 30px;

    background-color: #666;
    color: #fff;
    border: 1px solid #222;
    text-align: center;
}

.tooltip
{
    display: none;
    position: absolute;
    top: 50px;
}

jQuery 代码:

$(document).ready
(
    function ()
    {
        // add hover event handler
        $('.box').hover
        (
            function ()
            {
                // find the triggering box parent, and it's tooltip child
                $(this).parent().children('.tooltip').animate
                (
                    {
                        opacity: "toggle",      // toggle opacity
                    }
                );
            }
        );
    }
);

I've created a working example. Basically you need to create 3 divs with a visible and the invisible containers, add hover event handler and toggle the tooltip's visibility in that handler.

HTML:

<div class="parents">
    <div class="box type-1">box 1</div>
    <div class="tooltip type-1">tooltip 1</div>
</div>

<div class="parents">
    <div class="box type-2">box 2</div>
    <div class="tooltip type-2">tooltip 2</div>
</div>

<div class="parents">
    <div class="box type-3">box 3</div>
    <div class="tooltip type-3">tooltip 3</div>
</div>

CSS:

.parents
{
    float: left;
    margin: 5px;
}

.box,
.tooltip
{
    width: 80px;
    height: 30px;
    line-height: 30px;

    background-color: #666;
    color: #fff;
    border: 1px solid #222;
    text-align: center;
}

.tooltip
{
    display: none;
    position: absolute;
    top: 50px;
}

jQuery code:

$(document).ready
(
    function ()
    {
        // add hover event handler
        $('.box').hover
        (
            function ()
            {
                // find the triggering box parent, and it's tooltip child
                $(this).parent().children('.tooltip').animate
                (
                    {
                        opacity: "toggle",      // toggle opacity
                    }
                );
            }
        );
    }
);
何以笙箫默 2024-12-18 11:18:38

IBM 正在使用Dojo 的.expand 方法。您可以使用 expand 插件在 jQuery 中执行相同的功能。

IBM is using Dojo's .expand method. You can do the same functionality in jQuery using the expand plugin.

甜嗑 2024-12-18 11:18:38

您可以轻松做到这一点。步骤应遵循:

1) 有 3 个块,例如 DIV 或 UL LI,并在其中添加隐藏容器(或者如果您使用 jQuery 设置位置也没关系。
如果您的结构是:

<div class="block">
<div class="invisible"></div>
<div class="visible"></div>
</div>

2) 将 mouseenter 和 mouseleave 事件附加到所有 3 个块,例如:

$('.block').mouseenter(function() {
// some code to show the hidden container

$(this).find('.visible').show().addClass('visible_container');

});

$('.block').mouseleave(function() {
// some other code to hide the shown container
$('.visible_container').hide(); // Hide all the instances of .visible_container
});

3) 您应该根据元素的位置方法修改 JS 或 CSS,以便当调用 show() 时,该元素将显示在该元素的正上方。例如,如果您的隐藏块具有 CSS 规则 position:absolute,您将使用:

$(this).find('.visible')
       .show()
       .addClass('visible_container')
       .css('top', $(this).offset().top+'px')
       .css('left', $(this).offset().left+'px');

在这种情况下,显示的容器将调整到悬停块的右上角。

由于隐藏容器是块容器的子容器 - 不会调用 mouseleave 事件,因此它会保持良好的显示状态。

You can easily do that. The steps should follow:

1) Have 3 blocks like DIVs or UL LIs and add the hidden container inside(or it doesn't matter if you will set the position with jQuery.
If your structure would be:

<div class="block">
<div class="invisible"></div>
<div class="visible"></div>
</div>

2) Attach mouseenter and mouseleave events to all 3 blocks like:

$('.block').mouseenter(function() {
// some code to show the hidden container

$(this).find('.visible').show().addClass('visible_container');

});

$('.block').mouseleave(function() {
// some other code to hide the shown container
$('.visible_container').hide(); // Hide all the instances of .visible_container
});

3) You should modify JS or CSS according to the position methods for your elements so when show() is called the element would be displayed right on top of the element. For example if you hidden block would have a CSS rule position: absolute you would use:

$(this).find('.visible')
       .show()
       .addClass('visible_container')
       .css('top', $(this).offset().top+'px')
       .css('left', $(this).offset().left+'px');

In this case the shown container would be adjusted to the right upper corner of the hovered block.

As the hidden container is a child of the block container - no mouseleave event would be called so it would stay nicely displayed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文