Buat Bootstrap Popover Muncul / Hilang di Hover, bukan Klik


181

Saya sedang membangun situs web dengan Bootstrap's Popover dan saya tidak tahu bagaimana cara membuat popover itu muncul di hover, bukan klik.

Yang ingin saya lakukan adalah membuat popover muncul ketika seseorang melayang di atas tautan alih-alih mengkliknya dan popover menghilang ketika mereka pindah. Dokumentasi mengatakan itu mungkin menggunakan atribut data atau jquery. Saya lebih suka melakukannya dengan jquery karena saya memiliki beberapa popover.


20
Tip: Arahkan kursor ke perangkat sentuh. Jika Anda ingin memastikan kegunaan untuk layar sentuh, jangan ikat fungsi untuk melayang.
Jørgen R

Jawaban:


374

Tetapkan triggeropsi popover hoversebagai ganti click, yang merupakan default .

Ini dapat dilakukan dengan menggunakan salah satu data-*atribut di markup:

<a id="popover" data-trigger="hover">Popover</a>

Atau dengan opsi inisialisasi:

$("#popover").popover({ trigger: "hover" });

Ini DEMO .


Terima kasih balasannya. Bagaimana cara menetapkan opsi pemicu ke kode ini? <script> $(function () { $("#popover").popover(); }); </script>
Muhambi

8
@Jake: Gunakan $("#popover").popover({ trigger: "hover" });.
João Silva

Terima kasih! untuk beberapa alasan saya perlu mengimplementasikan pemicu data dan inisialisasi JS.
Anthony

Adakah yang bisa membantu saya memahami mana yang merupakan pilihan yang lebih baik, inisialisasi JS atau atribut data? Bahkan jika saya menggunakan atribut data, saya masih harus memanggil $ ("# popover"). Popover (); dari JavaScript saya.
Bailey

@ Bailey Itu akan tergantung pada apa aturan pengkodean Anda dan jika Anda bekerja dengan standar pengkodean tertentu, dan kemudian preferensi pribadi. Melihat keduanya, saya lebih suka menargetkan opsi pemicu dalam fungsi popover (). Tampaknya lebih mudah dibaca oleh saya.
Coderhi

33

Saya ingin menambahkan itu untuk aksesibilitas, saya pikir Anda harus menambahkan pemicu fokus:

yaitu $("#popover").popover({ trigger: "hover focus" });


Tidak ada klik untuk permintaan ini - lihat judul tulisan ini
Albuquerque Web Design

14

Jika Anda ingin mengarahkan popover itu sendiri, Anda juga harus menggunakan pemicu manual.

Inilah yang saya pikirkan:

function enableThumbPopover() {
    var counter;

    $('.thumbcontainer').popover({
        trigger: 'manual',
        animation: false,
        html: true,
        title: function () {
            return $(this).parent().find('.thumbPopover > .title').html();
        },
        content: function () {
            return $(this).parent().find('.thumbPopover > .body').html();
        },
        container: 'body',
        placement: 'auto'
    }).on("mouseenter",function () {
        var _this = this; // thumbcontainer

        console.log('thumbcontainer mouseenter')
        // clear the counter
        clearTimeout(counter);
        // Close all other Popovers
        $('.thumbcontainer').not(_this).popover('hide');

        // start new timeout to show popover
        counter = setTimeout(function(){
            if($(_this).is(':hover'))
            {
                $(_this).popover("show");
            }
            $(".popover").on("mouseleave", function () {
                $('.thumbcontainer').popover('hide');
            });
        }, 400);

    }).on("mouseleave", function () {
        var _this = this;

        setTimeout(function () {
            if (!$(".popover:hover").length) {
                if(!$(_this).is(':hover')) // change $(this) to $(_this) 
                {
                    $(_this).popover('hide');
                }
            }
        }, 200);
    });
}

6

Fungsionalitas, yang Anda jelaskan, dapat dengan mudah dicapai menggunakan tooltip Bootstrap.

<button id="example1" data-toggle="tooltip">Tooltip on left</button>

Kemudian panggil fungsi tooltip () untuk elemen tersebut.

$('#example1').tooltip();

http://getbootstrap.com/javascript/#tooltips


1

Setelah mencoba beberapa jawaban ini dan menemukan bahwa mereka tidak menskala dengan baik dengan banyak tautan (misalnya jawaban yang diterima membutuhkan garis jquery untuk setiap tautan yang Anda miliki), saya menemukan cara yang membutuhkan kode minimal untuk dapat bekerja, dan tampaknya juga berfungsi dengan baik, setidaknya di Chrome.

Anda menambahkan baris ini untuk mengaktifkannya:

$('[data-toggle="popover"]').popover();

Dan pengaturan ini untuk tautan anchor Anda:

data-toggle="popover" data-trigger="hover"

Lihat beraksi di sini , saya menggunakan impor yang sama dengan jawaban yang diterima sehingga harus bekerja dengan baik pada proyek yang lebih lama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.