Сделать Bootstrap Popover Появиться / исчезнуть при наведении вместо Click

149

Я создаю веб-сайт с Bootstrap Popover, и я не могу понять, как заставить popover отображаться при наведении, а не щелчке.

Все, что я хочу сделать, это включить popover, когда кто-то наводит курсор на ссылку, а не нажимает на нее и исчезает, когда они уходят. В документации говорится, что это возможно с использованием атрибута data или jquery. Я бы скорее сделал это с jquery, так как у меня много popovers.

  • 20
    Совет: наведите курсор мыши на сенсорные устройства. Если вы хотите обеспечить удобство использования сенсорных экранов, не связывайте функциональность с парением.

5 ответов

301
Лучший ответ

Задайте опцию trigger для popover для hover вместо click, которая является по умолчанию.

Это можно сделать, используя атрибуты data-* в разметке:

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

Или с опцией инициализации:

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

Здесь DEMO.

  • 0
    Спасибо за ответ. Как мне установить опцию триггера для этого кода? <script> $(function () { $("#popover").popover(); }); </script>
  • 7
    @Jake: использовать $("#popover").popover({ trigger: "hover" }); ,
Показать ещё 4 комментария
28

Я хотел бы добавить, что для доступности я думаю, вы должны добавить триггер фокуса:

то есть. $("#popover").popover({ trigger: "hover focus" });

  • 6
    видимо "hover click" тоже работает
6

Если вы хотите также нависать на popover, вам нужно использовать ручной триггер.

Вот что я придумал:

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);
    });
}
5

Функцию, описанную вами, можно легко получить с помощью всплывающей подсказки Bootstrap.

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

Затем вызовите функцию tooltip() для элемента.

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

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

0

Попробовав несколько из этих ответов и обнаружив, что они недостаточно хорошо масштабируются с несколькими ссылками (например, для принятого ответа требуется строка jquery для каждой ссылки), я наткнулся на способ, который требует минимального кода для получения и он также работает отлично, по крайней мере, в Chrome.

Вы добавляете эту строку для ее активации:

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

И эти настройки для ваших якорных ссылок:

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

Посмотрите здесь в действии, я использую тот же импорт, что и принятый ответ, поэтому он должен хорошо работать в старых проектах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню