Ich verwende ein Bootstrap-Popover, um eine Hover-Karte mit Benutzerinformationen zu erstellen, und löse sie beim Mouseover einer Schaltfläche aus. Ich möchte dieses Popover am Leben erhalten, während das Popover selbst schwebt, aber es verschwindet, sobald der Benutzer aufhört, über der Schaltfläche zu schweben. Wie kann ich das machen?
$('#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
quelle
quelle
Antworten:
Testen Sie mit dem folgenden Code-Snippet:
Kleine Modifikation (aus der von vikas bereitgestellten Lösung) für meinen Anwendungsfall.
quelle
;
in deiner Sekunde eine fehlt$(_this).popover("hide")
. Aber danke, es war so einfach und sauber!container: 'body'
zu den Optionen hinzugefügt , weil dadurch die Zellen verschoben wurden. Gute Antwort!animation:false
Stellen Sie sicher, dass das Flimmern behoben ist - überprüfen Sie den oben angegebenen Plunker-Link. Es funktioniert perfekt für mich.Ich bin nach einer anderen Lösung dafür gekommen ... hier ist der Code
quelle
animation: false
sonst das wiederholte Bewegen der Maus über den Link dazu führt, dass er nicht richtig funktioniertHier ist meine Meinung : http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/
Während Sie die Maus diagonal vom Popover-Trigger zum eigentlichen Popover-Inhalt bewegen, bewegen Sie den Mauszeiger manchmal über die folgenden Elemente. Ich wollte mit solchen Situationen umgehen - solange Sie Popover-Inhalte erreichen, bevor das Timeout ausgelöst wird, sind Sie sicher (das Popover verschwindet nicht). Es erfordert
delay
Option.Dieser Hack überschreibt grundsätzlich die Popover-
leave
Funktion, ruft jedoch das Original auf (wodurch der Timer gestartet wird, um das Popover auszublenden). Anschließend wird ein einmaliger Listener anmouseenter
Popover-Inhaltselemente angehängt.Wenn die Maus in das Popover wechselt, wird der Timer gelöscht. Dann hört es
mouseleave
auf Popover und wenn es ausgelöst wird, ruft es die ursprüngliche Urlaubsfunktion auf, damit es den Timer ausblenden starten kann.quelle
container = self.$tip;
diese Weise kann das Popover sogar gefunden werden, wenn diecontainer
Eigenschaft festgelegt ist. Hier gibt es eine Geige: jsfiddle.net/dennis_c/xJc65if (!thisTip.is(':visible'))
bevor ich denoriginalShow()
container: 'body',
wird, funktioniert diese Lösung nicht wie erwartet. Die Variablecontainer
muss durch ersetzt werdenself.$tip
. Überprüfen Sie meine Antwort für weitere Details: stackoverflow.com/a/28731847/439427Ich denke, ein einfacher Weg wäre folgender:
Auf diese Weise wird das Popover im Zielelement selbst erstellt. Wenn Sie also mit der Maus über das Popover fahren, befindet es sich immer noch über dem Element. Bootstrap 3.3.2 funktioniert gut damit. Ältere Versionen haben möglicherweise Probleme mit der Animation. Daher möchten Sie möglicherweise "Animation: falsch" deaktivieren.
quelle
delay: { "hide": 400 }
, um eine Verzögerung vor dem Verstecken hinzuzufügen, und es funktioniert großartig! 👍Ich habe den Triggersatz auf verwendet
hover
und den Containersatz auf den gegeben#element
und schließlich eine Platzierung desbox
auf hinzugefügtright
.Dies sollte Ihr Setup sein:
und
#example
CSS mussposition:relative;
die folgende jsfiddle überprüfen:https://jsfiddle.net/9qn6pw4p/1/
Bearbeitet
Diese Geige hat beide Links, die ohne Probleme funktionieren http://jsfiddle.net/davidchase03/FQE57/4/
quelle
content
Option jquery ajax verwenden , um den Inhalt von der Serverseite zu übernehmen. Wird das funktionieren oder ich muss etwas zusätzliche Arbeit dafür tunajax
in den Inhalten verwenden, aber Sie müssen einrichten , damit das funktioniert ... Bitte markieren Sie die Antwort richtig, wenn es Ihre gelöst hatOP
.. damit andere profitieren könnenSo habe ich es mit Bootstrap Popover gemacht, mit Hilfe anderer Bits im Netz. Ruft dynamisch den Titel und den Inhalt der verschiedenen Produkte ab, die vor Ort angezeigt werden. Jedes Produkt oder Popover erhält eine eindeutige ID. Popover verschwindet beim Beenden des Produkts ($ this .pop) oder des Popovers. Timeout wird verwendet, bei dem das Popover bis zum Beenden durch das Produkt anstelle des Popovers angezeigt wird.
quelle
Hier ist eine von mir entwickelte Lösung, die anscheinend gut funktioniert und es Ihnen gleichzeitig ermöglicht, die normale Bootstrap-Implementierung zum Aktivieren aller Popover zu verwenden.
Ursprüngliche Geige: https://jsfiddle.net/eXpressive/hfear592/
Portiert auf diese Frage:
quelle
Ich bin damit einverstanden, dass der beste Weg darin besteht, den von David Chase , Cu Ly und anderen angegebenen zu verwenden. Der einfachste Weg, dies zu tun, besteht darin, die
container: $(this)
Eigenschaft wie folgt zu verwenden:Ich möchte hier darauf hinweisen, dass das Popover in diesem Fall alle Eigenschaften des aktuellen Elements erbt . Wenn Sie dies beispielsweise für ein
.btn
Element (Bootstrap) tun , können Sie keinen Text im Popover auswählen . Ich wollte das nur aufzeichnen, da ich einige Zeit damit verbracht habe, meinen Kopf darauf zu schlagen.quelle
Vikas Antwort funktioniert perfekt für mich, hier füge ich auch Unterstützung für die Verzögerung hinzu (Ein- / Ausblenden).
Bitte beachten Sie auch, dass ich mich geändert habe:
mit:
so dass es genau auf das geöffnete Popover verweist und nicht auf ein anderes (da jetzt durch die Verzögerung mehr als 1 gleichzeitig geöffnet sein könnte)
quelle
Die gewählte Antwort funktioniert , schlägt jedoch fehl, wenn das Popover mit dem
body
als Container initialisiert wird .Eine Lösung, die auf der gewählten Antwort basiert, ist der folgende Code, der vor der Verwendung des Popovers platziert werden muss.
Die Änderung ist minimal,
self.$tip
wenn das DOM nicht durchlaufen wird, sondern erwartet wird, dass das Popover immer ein Geschwister des Elements ist.quelle
Gleiches gilt für Tooltips:
Für mich funktioniert die folgende Lösung, weil sie nicht bei jedem 'Mouseenter' Ereignis-Listener hinzufügt und es möglich ist, den Mauszeiger über das Tooltip-Element zu bewegen, das den Tooltip am Leben erhält.
quelle
Diese Lösung hat für mich gut funktioniert: (jetzt ist sie kugelsicher) ;-)
quelle
quelle
Ich habe festgestellt, dass der
mouseleave
Wille nicht ausgelöst wird, wenn seltsame Dinge passieren, wie sich der Fensterfokus plötzlich ändert und der Benutzer dann zum Browser zurückkehrt. In solchen Fällenmouseleave
wird niemals ausgelöst, bis der Cursor über das Element fährt und es wieder verlässt.Diese Lösung basiert
mouseenter
auf demwindow
Objekt und verschwindet, wenn die Maus an eine andere Stelle auf der Seite bewegt wird .Dies wurde entwickelt, um mit mehreren Elementen auf der Seite zu arbeiten, die es auslösen (wie in einer Tabelle).
quelle
Es wird flexibler sein mit
hover()
:quelle
Einfach :)
quelle
Ich musste dies kürzlich mit KO zum Laufen bringen, und die oben genannten Lösungen funktionierten nicht gut, wenn eine Verzögerung beim Ein- und Ausblenden auftrat. Das Folgende sollte dies beheben. Basierend darauf, wie Bootstrap-Tooltips funktionieren. Hoffe das hilft jemandem.
quelle
Dies ist mein Code für Show Dynamics Tooltips mit Verzögerung und geladen von Ajax.
quelle