Saya menggunakan popover Bootstrap untuk membuat kartu hover yang menampilkan info pengguna, dan saya memicunya saat mengarahkan mouse ke tombol. Saya ingin menjaga popover ini tetap hidup saat popover itu sendiri sedang di-hover, tetapi popover itu menghilang segera setelah pengguna berhenti mengarahkan kursor ke tombol. Bagaimana saya bisa melakukan ini?
$('#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
sumber
sumber
Jawaban:
Uji dengan cuplikan kode di bawah ini:
Modifikasi kecil (Dari solusi yang disediakan oleh vikas) agar sesuai dengan kasus penggunaan saya.
sumber
;
dalam diri Anda$(_this).popover("hide")
. Tapi terima kasih, itu sangat sederhana dan bersih!container: 'body'
opsi karena itu membuat sel bergeser. Jawaban yang bagus!animation:false
untuk memperbaiki flicker - periksa di tautan Plunker yang saya miliki di atas. Ini bekerja dengan sempurna untuk saya.Saya datang setelah solusi lain untuk ini ... ini kodenya
sumber
animation: false
jika tidak menggerakkan mouse di atas tautan berulang kali akan menyebabkannya tidak berfungsi dengan benarIni pendapat saya: http://jsfiddle.net/WojtekKruszewski/Zf3m7/22/
Terkadang saat memindahkan mouse dari pemicu popover ke konten popover aktual secara diagonal , Anda mengarahkan kursor ke elemen di bawah. Saya ingin menangani situasi seperti itu - selama Anda mencapai konten popover sebelum waktu tunggu habis, Anda aman (popover tidak akan hilang). Itu membutuhkan
delay
opsi.Peretasan ini pada dasarnya mengesampingkan
leave
fungsi Popover , tetapi memanggil yang asli (yang memulai pengatur waktu untuk menyembunyikan popover). Kemudian itu melampirkan pendengar satu kali kemouseenter
elemen konten popover.Jika mouse memasuki popover, timer dihapus. Kemudian ternyata mendengarkan
mouseleave
di popover dan jika dipicu, itu memanggil fungsi cuti asli sehingga bisa mulai menyembunyikan timer.sumber
container = self.$tip;
cara ini, popover bahkan dapat ditemukan ketikacontainer
properti diatur. Ada biola di sini: jsfiddle.net/dennis_c/xJc65if (!thisTip.is(':visible'))
sebelum meneleponoriginalShow()
container: 'body',
, solusi ini tidak akan berfungsi seperti yang diharapkan. Variabelcontainer
perlu diganti denganself.$tip
. Periksa jawaban saya untuk detail lebih lanjut: stackoverflow.com/a/28731847/439427Saya pikir cara yang mudah adalah ini:
Dengan cara ini popover dibuat di dalam elemen target itu sendiri. jadi saat Anda menggerakkan mouse ke atas popover, itu masih di atas elemen. Bootstrap 3.3.2 bekerja dengan baik dengan ini. Versi yang lebih lama mungkin memiliki beberapa masalah dengan animasi, jadi Anda mungkin ingin menonaktifkan "animation: false"
sumber
delay: { "hide": 400 }
untuk menambahkan beberapa penundaan sebelum bersembunyi dan itu berfungsi dengan baik! 👍Saya menggunakan set pemicu ke
hover
dan memberikan set wadah ke#element
dan akhirnya menambahkan penempatanbox
keright
.Ini harus menjadi pengaturan Anda:
dan
#example
css perluposition:relative;
memeriksa jsfiddle di bawah ini:https://jsfiddle.net/9qn6pw4p/1/
Diedit
Biola ini memiliki kedua tautan yang berfungsi tanpa masalah http://jsfiddle.net/davidchase03/FQE57/4/
sumber
content
opsi, untuk mengambil konten dari sisi server..akan itu berfungsi atau saya perlu melakukan beberapa pekerjaan tambahan untuk ituajax
dalam konten tetapi Anda perlu mengatur agar itu berfungsi ... tolong tandai jawaban dengan benar jika itu menyelesaikannyaOP
.. sehingga orang lain bisa mendapatkan keuntunganIni adalah bagaimana saya melakukannya dengan bootstrap popover dengan bantuan bit lain di internet. Secara dinamis mendapatkan judul dan konten dari berbagai produk yang ditampilkan di situs. Setiap produk atau popover mendapatkan id unik. Popover akan hilang saat keluar dari produk ($ this .pop) atau popover. Timeout digunakan dimana akan menampilkan popover sampai exit through product bukan popover.
sumber
Berikut adalah solusi yang saya buat yang tampaknya berfungsi dengan baik sementara juga memungkinkan Anda untuk menggunakan implementasi Bootstrap normal untuk menyalakan semua popovers.
Biola asli: https://jsfiddle.net/eXpressive/hfear592/
Diterjemahkan ke pertanyaan ini:
sumber
Saya setuju bahwa cara terbaik adalah menggunakan yang diberikan oleh: David Chase , Cu Ly, dan lainnya bahwa cara termudah untuk melakukannya adalah dengan menggunakan
container: $(this)
properti sebagai berikut:Saya ingin menunjukkan di sini bahwa popover dalam hal ini akan mewarisi semua properti elemen saat ini . Jadi, misalnya, jika Anda melakukan ini untuk sebuah
.btn
elemen (bootstrap), Anda tidak akan dapat memilih teks di dalam popover . Hanya ingin merekam itu karena saya menghabiskan cukup banyak waktu membenturkan kepala saya pada ini.sumber
Jawaban Vikas bekerja dengan sempurna untuk saya, di sini saya juga menambahkan dukungan untuk penundaan (tampilkan / sembunyikan).
Juga harap perhatikan saya berubah:
dengan:
sehingga mereferensikan persis pada popover yang dibuka itu, dan bukan yang lain (karena sekarang, melalui penundaan, lebih dari 1 dapat dibuka pada waktu yang sama)
sumber
Jawaban yang dipilih berfungsi tetapi akan gagal jika popover diinisialisasi dengan
body
sebagai wadah.Solusi berdasarkan jawaban yang dipilih adalah kode berikut yang perlu ditempatkan sebelum menggunakan popover.
Perubahannya minimal menggunakan
self.$tip
alih-alih melintasi DOM yang mengharapkan popover selalu menjadi saudara dari elemen.sumber
Hal yang sama untuk tooltips:
Bagi saya, solusi berikut berfungsi karena tidak menambahkan event listener pada setiap 'mouseenter' dan dimungkinkan untuk mengarahkan kursor kembali ke elemen tooltip yang membuat tooltip tetap hidup.
sumber
Solusi ini bekerja dengan baik untuk saya: (sekarang antipeluru) ;-)
sumber
sumber
Saya menemukan
mouseleave
tidak akan menyala ketika hal-hal aneh terjadi, seperti fokus jendela berubah tiba-tiba, lalu pengguna kembali ke browser. Dalam kasus seperti itu,mouseleave
tidak akan pernah menyala sampai kursor berpindah dan meninggalkan elemen lagi.Solusi ini saya datang dengan mengandalkan
mouseenter
padawindow
objek, sehingga menghilang ketika mouse digerakkan di tempat lain pada halaman.Ini dirancang untuk bekerja dengan memiliki beberapa elemen pada halaman yang akan memicunya (seperti dalam tabel).
sumber
Ini akan lebih fleksibel dengan
hover()
:sumber
Sederhana :)
sumber
Saya baru-baru ini perlu membuat ini berfungsi dengan KO dan solusi di atas tidak berfungsi dengan baik ketika mengalami penundaan pertunjukan dan persembunyian. Di bawah ini harus memperbaiki ini. Berdasarkan cara kerja tooltips bootstrap. Semoga ini bisa membantu seseorang.
sumber
Ini adalah kode saya untuk tooltips show dynamics dengan penundaan dan dimuat oleh ajax.
sumber