How do you pause before fading an element out usin

2019-02-02 21:56发布

I would like to flash a success message on my page.

I am using the jQuery fadeOut method to fade and then remove the element. I can increase the duration to make it last longer, however this looks strange.

What I would like to happen is have the element be displayed for five seconds, then fade quickly, and finally be removed.

How can you animate this using jQuery?

8条回答
Luminary・发光体
2楼-- · 2019-02-02 22:08

While @John Sheehan's approach works, you run into the jQuery fadeIn/fadeOut ClearType glitch in IE7. Personally, I'd opt for @John Millikin's setTimeout() approach, but if you're set on a pure jQuery approach, better to trigger an animation on a non-opacity property, such as a margin.

var left = parseInt($('#element').css('marginLeft'));
$('#element')
    .animate({ marginLeft: left ? left : 0 }, 5000)
    .fadeOut('fast');

You can be a bit cleaner if you know your margin to be a fixed value:

$('#element')
    .animate({ marginLeft: 0 }, 5000)
    .fadeOut('fast');

EDIT: It looks like the jQuery FxQueues plug-in does just what you need:

$('#element').fadeOut({
    speed: 'fast',
    preDelay: 5000
});
查看更多
【Aperson】
3楼-- · 2019-02-02 22:08

dansays's answer just doesn't work for me. For some reason, remove() runs immediately and the div disappears before any animations happen.

The following works, however (by omitting the remove() method):

$('#foo').fadeIn(500).delay(5000).fadeOut(500);

I don't mind if there are hidden DIVs on the page (there shouldn't be more than a few anyway).

查看更多
一夜七次
4楼-- · 2019-02-02 22:17

Update for 1.6.2

Nathan Long's answer will cause the element to pop off without obeying delay or fadeOut.

This works:

$('#foo').delay(2000).fadeOut(2000);
查看更多
SAY GOODBYE
5楼-- · 2019-02-02 22:23

Following on from dansays' comment, the following seems to work perfectly well:

$('#thing') .animate({dummy:1}, 2000) .animate({ etc ... });

查看更多
劳资没心,怎么记你
6楼-- · 2019-02-02 22:24
var $msg = $('#msg-container-id');
$msg.fadeIn(function(){
  setTimeout(function(){
    $msg.fadeOut(function(){
      $msg.remove();
    });
  },5000);
});
查看更多
叛逆
7楼-- · 2019-02-02 22:25

The new delay() function in jQuery 1.4 should do the trick.

$('#foo').fadeIn(200).delay(5000).fadeOut(200).remove();
查看更多
登录 后发表回答