【问题标题】:fade in/out hover by jQueryjQuery淡入/淡出悬停
【发布时间】:2010-07-27 11:53:26
【问题描述】:

我正在尝试通过 jQuery 为按钮添加一个简单的淡入/淡出效果,但我有点卡在淡出上。我使用此代码:

$('#header #menu li a').hover(function () {
  $(this).fadeOut(0).addClass('hover').fadeIn(300);
},
function () {
  $(this).fadeOut(0).removeClass('hover').fadeIn(0);
});

它添加了一个悬停类,它定义了一个 css 背景并将悬停图像淡入。但是当我将光标移出按钮时,它会像往常一样消失,不会淡出。

你能帮我解决这个问题吗?

非常感谢大家的回复

【问题讨论】:

    标签: jquery fadein fadeout


    【解决方案1】:

    这两个功能是相反的,所以应该可以工作......(代码更新

    $('#header #menu li a').hover(function () {
      $(this).fadeOut(0).addClass('hover').fadeIn(300);
    },
    function () {
      $(this).fadeOut(300)
             .queue(function(){ $(this).removeClass('hover').fadeIn(0).dequeue() });
    });
    

    这太丑了......在http://jsfiddle.net/zS6ex/上看到它的实际效果。

    但是,您仍然有一个问题:您正在淡入或淡出整个链接,而不仅仅是图像。据我所知,您不能单独设置背景图像不透明度(如果手动设置完全不透明度已经很痛苦了......)

    【讨论】:

    • 不幸的是它仍然存在同样的问题:(。
    • 仍然不相信整个fadeOut(0) 和fadeIn(0) 为什么不使用show() 和hide()?只使用fadeOut()的回调有什么问题?
    • 我在混合fadeIn/fadeOutshow/hide 时遇到了不好的经历。回调方法应该可以工作,但似乎没有......我没有调查过。这段代码吃掉时间和空间,但太少而无法注意到任何地方。我认为当你必须小心你的程序适合那三千字节的内存时,编程会更有趣......但我当时不在。
    【解决方案2】:

    就像在 SO 上多次回答一样,您需要使用 jQuery fx methods 中的 callbacks 来执行动画完成后的任何操作。

    $('#menu li a').hover(function(){
        $(this).fadeOut('fast', function(){
            $(this).addClass('hover').fadeIn(300);
        });
    }, function(){
    });
    

    无论如何,调用.fadeOut(0) 会淡出该元素,根本没有动画,就像即时一样。第一个参数是持续时间。

    http://api.jquery.com/fadeOut/

    【讨论】:

    • 非常感谢您的回复,但是即使我将光标移开,悬停图像仍然存在,这很奇怪。
    【解决方案3】:

    fadeOut(0) 没有动画,添加类时为什么不直接隐藏它

    $('#header #menu li a').hover(function () {
      $(this).hide().addClass('hover').fadeIn(300);
    },
    function () {
      $(this).hide().removeClass('hover').show();
      //  as there is no fading time the line above will be equal to
      $(this).removeClass('hover');
    });
    

    当你在动画完成后需要做一些事情时,你应该使用回调$(...).fadeIn(400,function(){ alert('this is the callback'); },如果你不使用回调,代码会在动画进行时运行。

    我不知道它是否有用,但 css 中有一个伪类 :hover,请参阅 here

    支持 :hover 伪类 在所有主流浏览器中。

    这样你就可以做各种各样的事情了:

    #header #menu li a:hover { ...set style of 'a' when over 'a' }
    #header #menu li:hover a { ...set style of 'a' when over 'li' }
    

    稍微玩一下,你可以用 css 做很多事情

    【讨论】:

    • CSS 不能在大多数浏览器现在实现的版本中做动画,尽管 Safari 可以用专有的类似函数的代码做一些疯狂的事情 (blargh)...
    • 没错,褪色本身需要在 javascript 中完成,但也许可以替换完整的悬停类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2010-11-16
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多