Używam wyskakującego okienka Bootstrap, aby utworzyć wizytówkę pokazującą informacje o użytkowniku i uruchamiam ją po najechaniu kursorem myszy na przycisk. Chcę utrzymać ten popover przy życiu, gdy sam popover jest najeżdżany, ale znika, gdy tylko użytkownik przestanie najeżdżać na przycisk. W jaki sposób mogę to zrobić?
$('#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
źródło
źródło
Odpowiedzi:
Przetestuj z fragmentem kodu poniżej:
Mała modyfikacja (z rozwiązania dostarczonego przez Vikas), aby pasowała do mojego przypadku użycia.
źródło
;
w tobie sekundy$(_this).popover("hide")
. Ale dziękuję, to było takie proste i czyste!container: 'body'
do opcji, ponieważ spowodowało to przesunięcie komórek. Świetna odpowiedź!animation:false
aby naprawić migotanie - sprawdź link Plunker, który mam powyżej. U mnie działa idealnie.Przyszedłem po innym rozwiązaniu tego ... oto kod
źródło
animation: false
inaczej przesunięcie myszy nad linkiem wielokrotnie spowoduje, że nie działa poprawnieOto moje podejście: http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/
Czasami podczas przesuwania myszy od wyzwalacza wyskakującego okienka do rzeczywistej zawartości okna podręcznego po przekątnej , najeżdżasz na elementy poniżej. Chciałem poradzić sobie z takimi sytuacjami - o ile dotrzesz do zawartości popover, zanim upłynie limit czasu, jesteś bezpieczny (popover nie zniknie). To wymaga
delay
opcji.Ten hack zasadniczo zastępuje
leave
funkcję Popover , ale wywołuje oryginał (który uruchamia licznik czasu, aby ukryć popover). Następnie dołącza jednorazowy odbiornik domouseenter
popover elementu zawartości.Jeśli mysz wejdzie w okienko popover, licznik czasu zostanie wyczyszczony. Następnie włącza nasłuchiwanie
mouseleave
po wyskakiwaniu i jeśli jest wyzwalany, wywołuje oryginalną funkcję wyjścia, aby mogła rozpocząć ukrywanie licznika czasu.źródło
container = self.$tip;
ten sposób popover można znaleźć nawet wtedy, gdycontainer
właściwość jest ustawiona. Jest tu skrzypce: jsfiddle.net/dennis_c/xJc65if (!thisTip.is(':visible'))
przed wywołaniemoriginalShow()
container: 'body',
to rozwiązanie nie będzie działać zgodnie z oczekiwaniami. Zmiennacontainer
musi zostać zastąpiona przezself.$tip
. Sprawdź moją odpowiedź, aby uzyskać więcej informacji: stackoverflow.com/a/28731847/439427Myślę, że prostym sposobem byłoby to:
W ten sposób popover jest tworzony wewnątrz samego elementu docelowego. więc kiedy przesuniesz kursor myszy nad popover, nadal będzie on nad elementem. Bootstrap 3.3.2 działa z tym dobrze. Starsza wersja może mieć problemy z animacją, więc możesz chcieć wyłączyć „animation: false”
źródło
delay: { "hide": 400 }
trochę opóźnienia przed ukryciem i działa świetnie! 👍Użyłem wyzwalacza ustawionego na
hover
i dałem zestaw kontenera na#element
i ostatecznie dodając umieszczenie elementubox
toright
.To powinna być Twoja konfiguracja:
a
#example
css musiposition:relative;
sprawdzić poniższy jsfiddle:https://jsfiddle.net/9qn6pw4p/1/
Edytowano
To skrzypce ma oba linki, które działają bez problemów http://jsfiddle.net/davidchase03/FQE57/4/
źródło
content
opcji, aby zabrać zawartość z serwera side..will że pracy lub muszę zrobić kilka dodatkowych prac za toajax
w treści, ale musisz ustawić się za to do pracy ... proszę zaznaczyć odpowiedź rację jeśli to rozwiązałoOP
.. więc inni mogą korzystaćTak zrobiłem z popover bootstrap z pomocą innych bitów w sieci. Dynamicznie pobiera tytuł i treść z różnych produktów wyświetlanych na stronie. Każdy produkt lub popover otrzymuje unikalny identyfikator. Popover zniknie po wyjściu z produktu ($ this .pop) lub popover. Limit czasu jest używany, gdy wyświetli popover do wyjścia przez produkt zamiast popover.
źródło
Oto rozwiązanie, które wymyśliłem, które wydaje się działać dobrze, a jednocześnie umożliwia użycie normalnej implementacji Bootstrap do włączania wszystkich okien popover.
Oryginalne skrzypce: https://jsfiddle.net/eXpressive/hfear592/
Przeniesiony do tego pytania:
źródło
Zgadzam się, że najlepiej jest skorzystać z tego, który podali: David Chase , Cu Ly i inni, że najprostszym sposobem jest użycie
container: $(this)
właściwości w następujący sposób:Chcę tutaj zaznaczyć, że popover w tym przypadku odziedziczy wszystkie właściwości bieżącego elementu . Na przykład, jeśli zrobisz to dla
.btn
elementu (bootstrap), nie będziesz w stanie zaznaczyć tekstu w wyskakującym okienku . Chciałem to tylko nagrać, ponieważ spędziłem trochę czasu, waląc w to głową.źródło
Odpowiedź Vikasa działa u mnie idealnie, tutaj dodam również obsługę opóźnienia (pokaż / ukryj).
Zwróć też uwagę, że zmieniłem:
z:
tak, że odwołuje się dokładnie do tego otwartego okna popover, a nie do żadnego innego (ponieważ teraz, z powodu opóźnienia, więcej niż 1 może być otwarte w tym samym czasie)
źródło
Wybrana odpowiedź działa, ale zakończy się niepowodzeniem, jeśli popover zostanie zainicjowany z
body
kontenerem.Rozwiązaniem opartym na wybranej odpowiedzi jest poniższy kod, który należy umieścić przed użyciem popover.
Zmiana jest minimalna przy użyciu
self.$tip
zamiast przechodzenia przez DOM, oczekując, że popover będzie zawsze rodzeństwem elementu.źródło
To samo dotyczy podpowiedzi:
Dla mnie poniższe rozwiązanie działa, ponieważ nie dodaje detektorów zdarzeń na każdym „środku myszy” i można ponownie najechać kursorem na element podpowiedzi, który utrzymuje etykietkę przy życiu.
źródło
To rozwiązanie zadziałało dla mnie dobrze: (teraz jest kuloodporne) ;-)
źródło
źródło
Zauważyłem, że
mouseleave
nie uruchomi się, gdy zdarzają się dziwne rzeczy, na przykład nagle zmienia się fokus okna, a następnie użytkownik wraca do przeglądarki. W takich przypadkachmouseleave
nigdy się nie uruchomi, dopóki kursor nie przejdzie i nie opuści elementu.To rozwiązanie, które wymyśliłem, opiera się
mouseenter
nawindow
obiekcie, więc znika, gdy mysz zostanie przesunięta w inne miejsce strony.Zostało to zaprojektowane do pracy z wieloma elementami na stronie, które ją wywołają (jak w tabeli).
źródło
Będzie bardziej elastyczny dzięki
hover()
:źródło
Prosty :)
źródło
Niedawno potrzebowałem, aby to działało z KO, a powyższe rozwiązania nie działały dobrze, gdy miałem opóźnienia w pokazaniu i ukryciu. Poniższe informacje powinny to naprawić. Na podstawie tego, jak działają podpowiedzi bootstrap. Mam nadzieję, że to komuś pomoże.
źródło
To jest mój kod do wyświetlania podpowiedzi dynamiki z opóźnieniem i ładowany przez ajax.
źródło