O efeito/evento conhecido como hover ocorre quando posicionamos o cursor do mouse sobre um elemento da página, como um link ou um botão. Com CSS é possível aplicar um estilo específico a links (tags <a>) quando eles recebem o foco do mouse usando a pseudo-classe :hover. Quando tiramos o cursor do mouse de sobre os links, eles perdem a classe :hover e consequentemente o estilo aplicado. Essa classe é muito comumente utilizada na construção de menus com CSS, para modificar a aparência do link quando posicionamos o cursor sobre ele.
Mas se precisarmos tratar essa situação em um outro elemento, como um botão ou uma div? Com CSS não é possível, pois esses elementos não são compatíveis com a classe :hover. Logo, é preciso recorrer a JavaScript para tratar dois eventos: o onmouseenter e o onmouseleave, que ocorrem quando o cursor é colocado sobre o elemento e retirado dele, respectivamente.
Na Listagem 1 vemos um exemplo de tratamento destes eventos em uma div, em que alteramos a cor do plano de fundo da div para vermelho quando o cursor é posicionado sobre ela e para branco quando o cursor é removido.
Listagem 1: Tratando os eventos onmouseenter e onmouseleave com JavaScript
<div id=”divTeste” onmouseenter="this.style.background='red';" onmouseleave="this.style.background='white';">Passe o mouse aqui.</div>
O mesmo poderia ser feito em uma tag script, capturando o elemento div pelo id e criando dois event handlers. Porém, vemos que ao longo do tempo essa tarefa se torna extensa e cansativa devido a repetição de códigos como o uso da função getElementById e criação de funções para tratar os eventos.
jQuery hover
Para tornar essa tarefa mais simples e prática, a biblioteca jQuery oferece uma função chamada hover() que permite definir o tratamento dos eventos onmouseenter e onmouseleave dentro de uma única chamada, criando duas funções internamente.
A sintaxe dessa função é a seguinte:
$(elemento).hover(função ao entrar, função ao sair);
Sendo assim, o tratamento da div do exemplo acima poderia ser simplificado da seguinte forma:
Listagem 2: Função jQuery hover
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
$(function(){
$("#divTeste").hover(
function(){
//Ao posicionar o cursor sobre a div
$(this).css('background', 'red');
},
function(){
//Ao remover o cursor da div
$(this).css('background', 'white');
}
);
});
</script>
</head>
<body>
<div id="divTeste">Passe o mouse aqui.</div>
</body>
</html>
Observe que nem mesmo foi preciso dar um nome às funções de tratamento dos eventos e que ambas ficam contidas na chamada da função hover, facilitando a manutenção e mantendo o código mais organizado.
Neste caso usamos apenas uma uma linha de código em cada função, mas rotinas mais extensas poderiam ser igualmente executadas. Salve o conteúdo da Listagem 2 como um arquivo de extensão html e abra no browser. Ao passar o cursor sobre a div, a cor do plano de fundo será alterada para vermelho e ao remover o cursor, essa cor será alterada novamente para branco.
Para maiores detalhes sobre a função hover visite a documentação oficial: http://api.jquery.com/hover/.
O objetivo desta dica foi apresentar brevemente a função hover e demonstrar como utilizá-la. Até a próxima.