Não estou procurando uma ação para chamar ao passar o mouse, mas uma maneira de saber se um elemento está passando o mouse sobre o assunto atualmente. Por exemplo:
$('#elem').mouseIsOver(); // returns true or false
Existe um método jQuery que realiza isso?
javascript
jquery
James Skidmore
fonte
fonte
Respostas:
Resposta original (e correta):
Você pode usar
is()
e verificar o seletor:hover
.Exemplo: http://jsfiddle.net/Meligy/2kyaJ/3/
(Isso funciona apenas quando o seletor corresponde a UM elemento no máximo. Consulte Editar 3 para obter mais informações)
.
Edit 1 (29 de junho de 2013): (Aplicável apenas ao jQuery 1.9.x, pois funciona com 1.10 ou superior, consulte o próximo Edit 2)
Esta resposta foi a melhor solução no momento em que a pergunta foi respondida. Esse seletor ': hover' foi removido com a
.hover()
remoção do método no jQuery 1.9.x.Curiosamente, uma resposta recente de "allicarn" mostra que é possível usar
:hover
como seletor CSS (vs. Sizzle) quando você o prefixa com um seletor$($(this).selector + ":hover").length > 0
, e parece funcionar!Além disso, o plugin hoverIntent mencionado em outra resposta também parece muito bom.
Edit 2 (21 de setembro de 2013):
.is(":hover")
obrasCom base em outro comentário, notei que a maneira original que eu publiquei
.is(":hover")
, na verdade ainda funciona no jQuery, então.Funcionou no jQuery 1.7.x.
Ele parou de funcionar no 1.9.1, quando alguém me informou, e todos pensamos que estava relacionado ao jQuery remover o
hover
alias para manipulação de eventos nessa versão.Funcionou novamente no jQuery 1.10.1 e 2.0.2 (talvez 2.0.x), o que sugere que a falha no 1.9.x foi um bug ou, portanto, não um comportamento intencional, como pensamos no ponto anterior.
Se você quiser testar isso em uma versão específica do jQuery, basta abrir o exemplo JSFidlle no início desta resposta, mude para a versão desejada do jQuery e clique em "Executar". Se a cor mudar ao passar o mouse, funciona.
.
Edit 3 (9 de março de 2014): Funciona apenas quando a sequência jQuery contém um único elemento
Como mostra @Wilmer nos comentários, ele tem um violino que nem funciona contra as versões do jQuery que eu e outros aqui testamos. Quando tentei descobrir o que há de especial no caso dele, notei que ele estava tentando verificar vários elementos ao mesmo tempo. Isso estava jogando
Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.Então, trabalhando com seu violino, isso NÃO funciona:
Enquanto isso FAZ trabalho:
Também funciona com sequências jQuery que contêm um único elemento, como se o seletor original correspondesse a apenas um elemento ou se você solicitou
.first()
os resultados, etc.Isso também é mencionado no meu boletim JavaScript + Dicas e recursos do desenvolvedor da Web .
fonte
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
.Usar:
jQuery 1.9+
fonte
Não funciona no jQuery 1.9. Criou este plugin com base na resposta do usuário2444818.
http://jsfiddle.net/Wp2v4/1/
fonte
Defina uma bandeira ao passar o mouse:
Em seguida, basta verificar sua bandeira.
fonte
mouseleave
tiver um elemento, quero verificar se o mouse inseriu outro elemento em particular.e.fromElement
ee.toElement
. Será que isso funciona para você?.data()
.Algumas atualizações a serem adicionadas depois de trabalhar um pouco sobre esse assunto:
Usamos o hoverIntent https://github.com/briancherne/jquery-hoverIntent para resolver o problema. Essencialmente, ele dispara se o movimento do mouse for mais deliberado. (uma coisa a ser observada é que ele será acionado com o mouse entrando em um elemento e saindo - se você quiser usar apenas uma passagem ao construtor, uma função vazia)
fonte
Você pode filtrar seu elemento de todos os elementos pairados. Código problemático:
Salvar código:
Para retornar booleano:
fonte
A resposta aceita não funcionou para mim no JQuery 2.x
.is(":hover")
retorna falso em todas as chamadas.Acabei com uma solução bastante simples que funciona:
fonte
Expandindo a resposta de @ Mohamed. Você poderia usar um pouco de encapsulamento
Como isso:
Use-o como:
Bifurcou o violino: http://jsfiddle.net/cgWdF/1/
fonte
Eu gosto da primeira resposta, mas para mim é estranho. Ao tentar verificar logo após o carregamento da página o mouse, tenho que colocar pelo menos um atraso de 500 milissegundos para que ele funcione:
http://codepen.io/molokoloco/pen/Grvkx/
fonte
Definir uma sinalização de acordo com a resposta de kinakuta parece razoável, você pode colocar um ouvinte no corpo para verificar se algum elemento está passando o mouse sobre um determinado momento.
No entanto, como você deseja lidar com nós filhos? Talvez você deva verificar se o elemento é um ancestral do elemento atualmente pairado.
fonte