Existe uma maneira rápida e fácil de fazer isso no jQuery que estou perdendo?
Não quero usar o evento mouseover porque já o estou usando para outra coisa. Eu só preciso saber se o mouse está sobre um elemento em um determinado momento.
Eu gostaria de fazer algo assim, se ao menos houvesse uma função "IsMouseOver":
function hideTip(oi) {
setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
Respostas:
Defina um tempo limite no mouseout para desaparecer e armazenar o valor retornado para os dados no objeto. Em seguida, após a transição, cancele o tempo limite se houver um valor nos dados.
Remova os dados no retorno de chamada do fadeout.
Na verdade, é mais barato usar o mouseenter / mouseleave porque eles não são acionados no menu quando as crianças passam o mouse / mouseout.
fonte
Este código ilustra o que happytime harry e eu estamos tentando dizer. Quando o mouse entra, sai uma dica de ferramenta, quando o mouse sai, define um atraso para que desapareça. Se o mouse digitar o mesmo elemento antes que o atraso seja acionado, destruiremos o gatilho antes que ele dispare usando os dados que armazenamos anteriormente.
fonte
Uma verificação instantânea limpa e elegante:
fonte
AVISO:
is(':hover')
foi descontinuado no jquery 1.8+. Veja esta postagem para uma solução.Você também pode usar esta resposta: https://stackoverflow.com/a/6035278/8843 para testar se o mouse está passando o mouse sobre um elemento:
fonte
:hover
não é um seletor jQuery válido: api.jquery.com/category/selectors (fonte: bugs.jquery.com/ticket/11574 )document.querySelectorAll(':hover')
Você pode usar o
hover
evento do jQuery para acompanhar manualmente:fonte
$.data
não envolve manipulação de strings.Eu precisava de algo exatamente assim (em um ambiente um pouco mais complexo e a solução com muitos 'mouseenters' e 'mouseleaves' não funcionavam corretamente), então criei um pequeno plugin de jquery que adiciona o método ismouseover. Até agora, funcionou muito bem.
Em qualquer lugar do documento, você o chama assim e retorna verdadeiro ou falso:
Eu testei no IE7 +, Chrome 1+ e Firefox 4 e está funcionando corretamente.
fonte
No jQuery você pode usar .is (': hover'), então
agora seria a maneira mais concisa de fornecer a função solicitada no OP.
Nota: O acima não funciona no IE8 ou inferior
Como alternativa menos sucinta que funciona no IE8 (se eu posso confiar no módulo IE8 do IE9), e o faz sem acionar
$(...).hover(...)
por todo o lado, nem requer conhecer um seletor para o elemento (nesse caso, a resposta do Ivo é mais fácil):fonte
$(':hover')
faz o trabalho no IE8. É um pseudo-seletor CSS2 válido, por isso deve funcionar.Peguei a ideia de SLaks e envolvi-a em uma turma pequena .
fonte
Eu criei um plugin jQuery que pode fazer isso e muito mais. No meu plugin, para obter todos os elementos sobre os quais o cursor está passando o mouse, basta fazer o seguinte:
Como mencionei, ele também tem muitos outros usos, como você pode ver no
jsFiddle encontrado aqui
fonte
Como não posso comentar, escreverei isso como resposta!
Por favor, entenda a diferença entre o seletor css ": hover" e o evento hover!
": hover" é um seletor de css e foi de fato removido com o evento quando usado assim
$("#elementId").is(":hover")
, mas significa que ele realmente não tem nada a ver com o hover de evento do jQuery.se você codificar
$("#elementId:hover")
, o elemento só será selecionado quando você passar o mouse com o mouse. a instrução acima funcionará com todas as versões do jQuery à medida que você seleciona esse elemento com a seleção pura e legítima do css.Por outro lado, o evento passa o mouse que é
é realmente preterido como jQuery 1.8 aqui o estado do site jQuery:
Por que eles removeram o uso não é claro (": hover"), mas tudo bem, você ainda pode usá-lo como acima e aqui está um pequeno truque para usá-lo.
Ah, e eu não recomendaria a versão do timeout, pois isso traz muita complexidade , use as funcionalidades de timeout para esse tipo de coisa se não houver outra maneira e acredite: em 95% dos casos, existe outra maneira !
Espero poder ajudar algumas pessoas por aí.
Greetz Andy
fonte
Graças a vocês dois. Em algum momento, tive que desistir de tentar detectar se o mouse ainda estava sobre o elemento. Eu sei que é possível, mas pode exigir muito código para ser realizado.
Demorei um pouco, mas aceitei as duas sugestões e criei algo que funcionaria para mim.
Aqui está um exemplo simplificado (mas funcional):
E então, para fazer isso funcionar em algum texto, é tudo o que tenho que fazer:
Juntamente com um monte de CSS sofisticados, isso permite algumas dicas muito úteis sobre a ajuda do mouse. A propósito, eu precisava do atraso na saída do mouse por causa de pequenas lacunas entre as caixas de seleção e o texto que estava causando a ajuda da intermitência à medida que você move o mouse. Mas isso funciona como um encanto. Também fiz algo semelhante para os eventos de foco / desfoque.
fonte
Eu vejo muito o tempo limite usado para isso, mas no contexto de um evento, você não consegue olhar para as coordenadas, assim:
Dependendo do contexto, pode ser necessário garantir (este == e.target) antes de chamar areXYInside (e).
fyi- Eu estou olhando para usar essa abordagem dentro de um manipulador dragLeave, para confirmar que o evento dragLeave não foi acionado ao entrar em um elemento filho. Se, de alguma forma, você não verificar se ainda está dentro do elemento pai, poderá tomar uma ação equivocada, destinada apenas a quando você realmente deixa o pai.
EDIT: esta é uma boa idéia, mas não funciona de forma consistente o suficiente. Talvez com alguns pequenos ajustes.
fonte
Você pode testar
jQuery
se algum div filho tem uma determinada classe. Em seguida, aplicando essa classe quando você passa o mouse por cima e por fora de uma determinada div, é possível testar se o mouse está sobre ela, mesmo quando você passa o mouse sobre um elemento diferente da página. Muito menos código dessa maneira. Usei isso porque tinha espaços entre divs em um pop-up e só queria fechar o pop-up quando saí do pop-up, não quando movia o mouse sobre os espaços no pop-up. Então, eu chamei uma função de mouseover na div de conteúdo (que a pop-up havia acabado), mas ela só acionaria a função close quando eu passava o mouse sobre a div de conteúdo E estava fora da pop-up!fonte
Essa seria a maneira mais fácil de fazer isso!
fonte
Aqui está uma técnica que não depende do jquery e usa a
matches
API DOM nativa . Ele usa prefixos de fornecedor para oferecer suporte a navegadores que retornam ao IE9. Veja matchesselector em caniuse.com para mais detalhes.Primeiro, crie a função matchSelector, da seguinte maneira:
Em seguida, para detectar o foco:
fonte
Eu respondi isso em outra pergunta, com todos os detalhes que você pode precisar:
Detectar SE pairando sobre o elemento com o jQuery (possui 99 upvotes no momento da escrita)
Basicamente, você pode fazer algo como:
Isso funciona apenas se
oi
for um objeto jQuery que contém um único elemento. Se houver vários elementos correspondentes, você precisará aplicar a cada elemento, por exemplo:Isso foi testado a partir do jQuery 1.7.
fonte
Aqui está uma função que ajuda a verificar se o mouse está dentro de um elemento ou não. A única coisa que você deve fazer é chamar a função na qual você pode ter um EventObject associado ao mouse ao vivo. algo assim:
Você pode ver o código fonte aqui no github ou na parte inferior da postagem:
https://github.com/mostafatalebi/ElementsLocator/blob/master/elements_locator.jquery.js
fonte
Estendendo o que 'Happytime harry' disse, certifique-se de usar a função .data () jquery para armazenar o ID do tempo limite. Isso é para que você possa recuperar o ID de tempo limite com muita facilidade quando o 'mouseenter' for acionado no mesmo elemento posteriormente, permitindo que você elimine o acionador para que a dica de ferramenta desapareça.
fonte
Você pode usar os eventos mouseenter e mouseleave do jQuery. Você pode definir um sinalizador quando o mouse entra na área desejada e desmarcá-lo quando sai da área.
fonte
Combinei idéias deste tópico e criei isso, o que é útil para mostrar / ocultar um submenu:
Parece funcionar para mim. Espero que isso ajude alguém.
Edição: agora, percebendo essa abordagem não está funcionando corretamente no IE.
fonte
Não pude usar nenhuma das sugestões acima.
Por que prefiro minha solução?
Este método verifica se o mouse está sobre um elemento a qualquer momento escolhido por você .
Mouseenter e : hover são legais, mas o mouseenter é acionado apenas se você mover o mouse, não quando o elemento se move sob o mouse.
: pairar é muito doce, mas ... IE
Então eu faço isso:
Não 1. armazene a posição x, y do mouse toda vez que for movido quando necessário,
Não 2. verifique se o mouse está sobre algum dos elementos que correspondem à consulta, faça coisas ... como acionar um evento do mouseenter
fonte
Apenas uma observação sobre a popular e útil resposta de Arthur Goldsmith acima: Se você estiver movendo o mouse de um elemento para outro no IE (pelo menos até o IE 9), poderá ter alguns problemas para que isso funcione corretamente se o novo elemento tiver um plano de fundo transparente (o que seria por padrão). Minha solução alternativa foi fornecer ao novo elemento uma imagem de plano de fundo transparente.
fonte
FIDDLE
fonte
Você pode usar
is(':visible');
no jquery. E para $ ('. Item: hover'), ele também está funcionando no Jquery.este é um snnipet de código htm:
e este é o código JS:
é disso que eu estava falando :)
fonte