【问题标题】:Jquery fade in/out on hover problem - Stop the blinking!Jquery 在悬停问题上淡入/淡出 - 停止闪烁!
【发布时间】:2011-07-25 22:24:59
【问题描述】:

我正在使用此脚本在悬停时淡入另一个图标。

我还想在顶部图像完成淡入后隐藏上一个图像。

我遇到的问题是,当您将鼠标悬停在它上面时,它似乎在消失之前闪烁。我需要停止闪烁!

下面是我的 HTML 和 jQuery 代码。我试图让这段代码有点通用。

.link-container {
    position: relative;
    cursor: pointer;
    float: left;
}
.title-hover {
    background-position: 0 -106px;
    width: 320px;
    height: 33px;
    margin: -32px 0 0 56px;
    display: none;
    z-index: 2;

}
.title {
    background-position: 0 -63px;
    width: 320px;
    height: 33px;
    margin: -32px 0 0 56px;
}

<div class="link-container">
     <div class="main-tile hover-init title"></div>
     <div class="main-tile title-hover"></div>
</div>

$(function () {
     $(".link-container").hover(function () {
        $(".hover-init", this).next().stop(true, true).fadeIn(400);
        $(".hover-init", this).hide();
    }, function () {
        $(".hover-init", this).next().stop(true, true).fadeOut(400);
        $(".hover-init", this).show();
    });
});

【问题讨论】:

  • 你没有发布 HTML,只是 CSS。
  • jquery 是旧的,这里是最新版本以及 html。我想淡入 .next 然后隐藏悬停初始化。然后到相反的淡出。您建议的方法有效,但它不会隐藏悬停初始化它只是将 .next 淡化在另一个之上,这看起来不太好 =/
  • 你在回复我的回答对吗?
  • 是的,我正在响应您的建议

标签: jquery hover fadein fadeout


【解决方案1】:

您想在fadeIn 完成后开始fadeOut,对吗?然后让它成为fadeIn函数的回调:

$(".hover-init", this).next().stop(true, true).fadeIn(400, function() {
  $(".hover-init", this).fadeOut();
});

编辑:

现在我看到你想要达到的效果我什至不知道你为什么要淡出第一个div。

http://jsfiddle.net/ARyjq/3/ 这样做

【讨论】:

  • 所以淡出失败?尝试使用 $(this).fadeOut() 而不是 $(".hover-init", this).fadeOut()
  • 使用您的方法不会出错,只是将一个图像淡化到另一个图像之上。使用我在帖子中的方法,它似乎隐藏了图像然后淡入淡出导致眨眼。我正在寻找一种方法来淡入一个图像,然后隐藏另一个图像,这样就不会眨眼。所以这两种方法都没有错误
  • 是的,但这看起来也很奇怪,不是吗?一个出现,然后其他消失...我会查看您的代码($(this) 没有修复它吗?)
  • $(this) 没有修复它。它只是创造了一个连续的闪烁效果。褪色一个图像然后隐藏另一个看起来不应该看起来很奇怪,因为一旦顶部的图像在底部褪色,一个应该消失而没有人注意到这里是我现在正在处理的项目的链接,它可能更容易看到我的问题。此示例当前正在使用原始帖子中的代码。当您将鼠标悬停在任何按钮或名称上时,您会注意到它不是平滑的淡入淡出。 Sample
  • jsfiddle.net/ARyjq 这是您的简化解决方案。请注意,定位必须是绝对的,因为 2 个 div 位于另一个之上。
【解决方案2】:

问题是当标题弹出时,悬停会从一个 div 切换到另一个 div。
因此,您需要嗅探您所在的 div 类型并改变响应。

按照您的要求执行的代码如下所示:

$(".link-container div.main-tile").hover (fancyRollover);

function fancyRollover (zEvent) {
    var jThis           = $(this);
    var bInInitDiv      = jThis.hasClass ('hover-init');
    if (bInInitDiv) {
        var initDiv     = jThis;
        var hoverDiv    = jThis.next ();
    }
    else {
        var initDiv     = jThis.prev ();
        var hoverDiv    = jThis;
    }

    if (zEvent.type == 'mouseenter') {
        if (bInInitDiv) {
            hoverDiv.stop (true, true).fadeIn (400, function () {
                initDiv.hide ();
            } );
        }
        else {
            //--- Do nothing.
        }
    }
    else { //-- zEvent.type == 'mouseleave'
        if (bInInitDiv) {
            //--- Do nothing.
        }
        else {
            hoverDiv.stop (true, true).fadeOut (400);
            initDiv.show ();   
        }
    }
}


See it in action at jsFiddle.

【讨论】:

  • Brock 我对 Jquery 不太先进,所以请原谅我的困惑。我拿了你的一段代码并试图将它应用到我的 html 中,但它似乎没有做任何事情......关于为什么会这样的任何建议?
  • 您的代码与问题中的代码和小提琴中的代码有何不同? (小提琴与问题相同,除了用于显示操作的较小 CSS 调整。)此答案 jQuery 应直接放入问题中描述的页面。你能链接到实际页面吗?
  • 我设法修复它,以便您的代码正常工作,但现在我遇到了一个新问题,请查看此评论末尾的链接并将鼠标悬停在“简历”链接上。图标和文本都应该一起淡入淡出,使用您的代码,它们似乎被单独处理。就连名字上的悬停似乎也不流畅LINK HERE
  • 它们被分开处理,因为它们在不同的divs。该结构与发布的问题不同!如果您希望链接 div,请打开一个新问题 问题已按发布的方式解决。此外,现在,看起来事情只是在悬停时变成蓝色。如果仅此而已,则不需要单独的图像和交换 div。透明图像和一些 CSS 可以工作。另外,使用 jQuery 1.6.2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多