A biblioteca jQuery fornece um número de funções para animações e efeitos, os quais estão listados em sua documentação.

Alterando a visibilidade

Para mudanças simples de visibilidade, você pode usar hide() e show():
$("#pic").hide();
$("#pic").show(); (Veja exemplo)
Você também pode usar toggle(), que vai decidir entre mostrar ou esconder levando em conta o estado atual: $("#pic").toggle(); (Veja exemplo)
Você pode passar um tempo de duração para qualquer uma dessas funções e o jQuery vai animar a alteração da visibilidade: $("#pic").toggle(1000);
Você também pode usar slideDown(), slideUp() e slideToggle() para efeitos de slides (Veja exemplo) ou fadeIn(), fadeOut() e fadeToggle() para efeitos de fechamento de slides (Veja exemplo).
Você pode passar uma função callback como segundo parâmetro para qualquer uma dessas funções, e o jQuery vai chamar essa função callback quando a animação estiver completa:
$("#pic").toggle(1000, function() {
    $("body").append("Está aqui!");
});
Você também pode encadear vários efeitos e chamar delay() se quiser algum atraso entre eles:
$("#pic").slideUp(300).delay().fadeIn();

Personalizando a animação

Se você quiser animar propriedades CSS específicas, você pode usar animate():
    $("#pic").animate({
       width: "70%",
       opacity: 0.7,
       padding: 20
    }, 1000);
Note que você só pode animar propriedades CSS que são valores numéricos - então você não pode usar isso para animar propriedades como a cor, 'color'. (Veja exempleo)
Você também pode anexar várias funções de callback em animate(), caso você queira descobrir quando a animação progredir ou estiver completa. Veja a documentação para mais detalhes.

Animando com responsabilidade

As animações sempre devem melhorar a experiência do usuário, e não torná-la pior. Elas devem ajudar os usuários a entender algo sobre o estado do seu aplicativo web ou dar um toque de diversão - elas não devem causar lentidão desnecessariamente e frustrar o usuário. Você pode pedir aos usuários um feedback sobre seu uso de animações ou trabalhar com um designer para decidir como e onde fazer as animações.
Se você sabe que seu usuário está usando um dispositivo que não lida bem com animações, você pode definir $.fx.off como true.
Carregando