it-roy-ru.com

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

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

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

172
Muhambi

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

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

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

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

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

Вот это DEMO.

353
João Silva

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

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

30
Calexo

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

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

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);
    });
}
11
Johannes Ferner

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

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

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

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

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

6
VforVitamin

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

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

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

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

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

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

1
Peter