Estou usando um popover de Bootstrap para criar um cartão de foco que mostra informações do usuário e o estou acionando ao passar o mouse sobre um botão. Desejo manter este popover ativo enquanto o próprio popover está sendo passado, mas ele desaparece assim que o usuário pára de passar o mouse sobre o botão. Como posso fazer isso?
$('#example').popover({
html : true,
trigger : 'manual',
content : function() {
return '<div class="box">Popover</div>';
}
});
$(document).on('mouseover', '#example', function(){
$('#example').popover('show');
});
$(document).on('mouseleave', '#example', function(){
$('#example').popover('hide');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<script src="https://unpkg.com/@popperjs/core@2"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<a href="#" id="example" class="btn btn-danger" rel="popover" >hover for popover</a>
jquery
twitter-bootstrap
popper.js
vikas devde
fonte
fonte
Respostas:
Teste com o snippet de código abaixo:
Pequena modificação (da solução fornecida por vikas) para se adequar ao meu caso de uso.
fonte
;
segundo em você$(_this).popover("hide")
. Mas obrigado, era tão simples e limpo!container: 'body'
as opções porque fazia as células mudarem. Ótima resposta!animation:false
para corrigir a cintilação - verifique no link do Plunker que tenho acima. Funciona perfeitamente para mim.Eu vim atrás de outra solução para isso ... aqui está o código
fonte
animation: false
caso contrário, mover o mouse sobre o link repetidamente fará com que ele não funcione corretamenteAqui está minha opinião: http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/
Às vezes, ao mover o mouse do gatilho popover para o conteúdo popover real na diagonal , você passa o mouse sobre os elementos abaixo. Eu queria lidar com essas situações - contanto que você alcance o conteúdo do popover antes que o tempo limite seja acionado, você estará seguro (o popover não desaparecerá). Requer
delay
opção.Este hack basicamente substitui a
leave
função Popover , mas chama o original (que inicia o cronômetro para ocultar o popover). Em seguida, ele anexa um ouvinte único aomouseenter
elemento de conteúdo popover.Se o mouse entrar no popover, o cronômetro será zerado. Em seguida, ele escuta o
mouseleave
popover e, se for acionado, chama a função de licença original para iniciar o temporizador de ocultação.fonte
container = self.$tip;
Desta forma, o popover pode até ser encontrado quando acontainer
propriedade é definida. Há um violino aqui: jsfiddle.net/dennis_c/xJc65if (!thisTip.is(':visible'))
antes de chamar ooriginalShow()
container: 'body',
esta solução não funcionará conforme o esperado. A variávelcontainer
precisa ser substituída porself.$tip
. Verifique minha resposta para mais detalhes: stackoverflow.com/a/28731847/439427Acho que uma maneira fácil seria esta:
Dessa forma, o popover é criado dentro do próprio elemento de destino. então, quando você move o mouse sobre o popover, ele ainda está sobre o elemento. O Bootstrap 3.3.2 funciona bem com isso. A versão mais antiga pode ter alguns problemas com animação, então você pode querer desativar "animação: falso"
fonte
delay: { "hide": 400 }
para adicionar algum atraso antes de ocultar e funciona muito bem! 👍Usei o conjunto de gatilhos para
hover
e dei o conjunto de contêineres para#element
e, finalmente, adicionei um posicionamento debox
pararight
.Esta deve ser sua configuração:
e
#example
css precisaposition:relative;
verificar o jsfiddle abaixo:https://jsfiddle.net/9qn6pw4p/1/
Editado
Este violino tem ambos os links que funcionam sem problemas http://jsfiddle.net/davidchase03/FQE57/4/
fonte
content
opção, para obter o conteúdo do lado do servidor ... funcionará ou eu preciso fazer algum trabalho extra para issoajax
no conteúdo, mas você precisa configurar para que funcione ... por favor, marque a resposta correta se isso resolveu seuOP
.. para que outros possam se beneficiarFoi assim que fiz com o bootstrap popover com ajuda de outros bits da rede. Obtém dinamicamente o título e o conteúdo dos vários produtos exibidos no site. Cada produto ou popover recebe uma identificação exclusiva. O popover desaparecerá ao sair do produto ($ this .pop) ou do popover. O tempo limite é usado onde exibirá o popover até sair pelo produto em vez do popover.
fonte
Aqui está uma solução que desenvolvi que parece funcionar bem, ao mesmo tempo que permite que você use a implementação normal do Bootstrap para ativar todos os popovers.
Violino original: https://jsfiddle.net/eXpressive/hfear592/
Transferido para esta pergunta:
fonte
Concordo que a melhor maneira é usar aquele fornecido por: David Chase , Cu Ly e outros que a maneira mais simples de fazer isso é usar a
container: $(this)
propriedade da seguinte maneira:Quero salientar aqui que o popover, neste caso, herdará todas as propriedades do elemento atual . Então, por exemplo, se você fizer isso para um
.btn
elemento (bootstrap), você não poderá selecionar o texto dentro do popover . Só queria registrar isso, já que passei um bom tempo batendo minha cabeça nisso.fonte
A resposta do Vikas funciona perfeitamente para mim, aqui também adiciono suporte para o atraso (mostrar / ocultar).
Também preste atenção, eu mudei:
com:
para que faça referência exatamente àquele popover aberto, e não a qualquer outro (já que agora, por meio do atraso, mais de 1 pode ser aberto ao mesmo tempo)
fonte
A resposta escolhida funciona, mas falhará se o popover for inicializado com o
body
como o contêiner.Uma solução baseada na resposta escolhida é o seguinte código que precisa ser colocado antes de usar o popover.
A mudança é mínima usando em
self.$tip
vez de percorrer o DOM esperando que o popover seja sempre um irmão do elemento.fonte
Mesma coisa para dicas de ferramentas:
Para mim, a solução a seguir funciona porque não adiciona ouvintes de evento em cada 'mouseenter' e é possível voltar ao elemento de dica de ferramenta que mantém a dica de ferramenta viva.
fonte
Esta solução funcionou bem para mim: (agora é à prova de balas) ;-)
fonte
fonte
Descobri que o
mouseleave
não dispara quando coisas estranhas acontecem, como o foco da janela muda repentinamente e o usuário volta ao navegador. Em casos como esse,mouseleave
nunca será disparado até que o cursor passe e deixe o elemento novamente.Esta solução que criei depende
mouseenter
dowindow
objeto, então ele desaparece quando o mouse é movido para qualquer outro lugar na página.Isso foi projetado para funcionar com vários elementos na página que irão acioná-lo (como em uma tabela).
fonte
Será mais flexível com
hover()
:fonte
Simples :)
fonte
Recentemente, precisei fazer isso funcionar com KO e as soluções acima não funcionaram bem quando houve um atraso no show e hide. A seguir deve corrigir isso. Com base em como as dicas de ferramentas de bootstrap funcionam. Espero que isso ajude alguém.
fonte
Este é o meu código para mostrar dicas de dinâmica com atraso e carregado por ajax.
fonte