Então, depois de ler uma pergunta respondida recentemente, não estou claro se realmente entendo a diferença entre o mouseenter()
e mouseover()
. A postagem afirma
Passe o rato por cima():
Dispara ao entrar em um elemento e sempre que qualquer movimento do mouse ocorrer dentro do elemento.
MouseEnter ():
Dispara ao entrar em um elemento.
Eu vim com um violino que usa os dois e eles parecem ser bem parecidos. Alguém por favor pode me explicar a diferença entre os dois?
Eu também tentei ler as definições de JQuery, ambas dizem a mesma coisa.
O evento mouseover é enviado para um elemento quando o ponteiro do mouse entra no elemento
O evento mouseenter é enviado para um elemento quando o ponteiro do mouse entra no elemento.
Alguém pode esclarecer com um exemplo?
fonte
Respostas:
Você vê o comportamento quando seu elemento de destino contém elementos filhos:
http://jsfiddle.net/ZCWvJ/7/
Cada vez que o mouse entra ou sai de um elemento filho,
mouseover
é acionado, mas nãomouseenter
.fonte
mouseleave
evento: jsfiddle.net/ZCWvJ/232 jsfiddle.net/ZCWvJ/233 Se estiver onde o mesmo que digitar + sair, a contagem de mais será a soma de as contagens para entrar e sair.var n = + el.text();
vez devar n = el.text();
? Estou apenas pedindo curiosidade.+
operador para coagir a string retornada deel.text()
para um número. Eu preciso ? Não. Nesse caso, a próxima instrução que usan
também a obrigaria a um número. Então, por que eu usei? Eu não tenho certeza ... isso foi há 2 anos atrás. É um bom hábito. Isso torna minha intenção explícita. Provavelmente eu tinhan + 1
antes de salvar, mas decidi diminuir meu código em 2 caracteres e apenas usar++n
.n + 1
se não coagirn
a um número, mas em vez disso, coagir1
a uma cadeia resultante na produção de, por exemplo0111111
.Este é um dos melhores exemplos que encontrei:
http://bl.ocks.org/mbostock/5247027
fonte
Embora eles operem da mesma maneira, no entanto, o
mouseenter
evento é acionado apenas quando o ponteiro do mouse entra no elemento selecionado . Omouseover
evento é acionado se um ponteiro do mouse inserir qualquer elemento filho também .fonte
Veja o código de exemplo e a demonstração na parte inferior da página de documentação do jquery:
http://api.jquery.com/mouseenter/
fonte
Os mouseenter evento difere de mouseover na forma como ele lida com subida do evento . O evento mouseenter , somente aciona seu manipulador quando o mouse entra no elemento ao qual está vinculado, e não um descendente . Consulte: https://api.jquery.com/mouseenter/
O evento mouseleave difere da saída do mouse na maneira como lida com a subida do evento . O evento mouseleave , somente aciona seu manipulador quando o mouse deixa o elemento ao qual está vinculado, não um descendente . Consulte: https://api.jquery.com/mouseleave/
fonte
Este exemplo demonstra a diferença entre os eventos mousemove , mouseenter e mouseover :
https://jsfiddle.net/z8g613yd/
HTML:
CSS:
JS:
onmousemove
: ocorre toda vez que o ponteiro do mouse é movido sobre o elemento div.onmouseenter
: ocorre apenas quando o ponteiro do mouse entra no elemento div.onmouseover
: ocorre quando o ponteiro do mouse entra no elemento div e seus elementos filhos (pe espaço).fonte
<script>
jsfiddle.net/orc8empdPergunta antiga, mas ainda não há uma resposta boa e atualizada com insight imo.
Atualmente, todos os navegadores suportam
mouseover/mouseout
emouseenter/mouseleave
. No entanto, o jQuery não registra seu manipuladormouseenter/mouseleave
, mas silenciosamente os coloca em um invólucro,mouseover/mouseout
como mostra o código a seguir e faz sua própria interpretação ligeiramente diferentemouseenter/mouseleave
.O comportamento exato dos eventos é especialmente relevante em "delegados manipuladores". Infelizmente, o jQuery também tem sua própria interpretação diferente do que são os manipuladores delegados e o que eles devem receber para eventos. Esse fato é mostrado em outra resposta para o evento de clique mais simples.
Então, como responder adequadamente a uma pergunta sobre o jQuery, que usa o texto Javascript para eventos e manipuladores, mas torna os dois diferentes e nem menciona isso na documentação?
Primeiro as diferenças no Javascript "real":
enter/over
um recebe um correspondenteleave/out
(possivelmente atrasado / nervoso)mouseenter/mouseleave
mouseover/mouseout
Após alguns testes, mostra que, desde que você não use o jQuery "delegar manipuladores com registro de seletor", a emulação é desnecessária, mas razoável: filtra os
mouseover/mouseout
eventos quemouseenter/mouseleave
não seriam obtidos. O alvo está confuso, no entanto. O realmouseenter/mouseleave
daria o elemento manipulador como alvo, a emulação pode indicar filhos desse elemento, ou seja, o que formouseover/mouseout
carregado.Mostrar snippet de código
fonte