使Bootstrap Popover在悬停时显示/消失而不是单击


181

我正在使用Bootstrap的Popover构建网站,我不知道如何使Popover出现在悬停而不是点击的位置。

我要做的是,当有人将鼠标悬停在链接上而不是单击链接时,会出现一个弹出窗口,并且当他们离开时,弹出窗口会消失。该文档说,可以使用data属性或jquery。我宁愿使用jQuery,因为我有多个弹出窗口。


20
提示:悬停会吸引触摸设备。如果要确保触摸屏的可用性,请不要将功能绑定到悬停上。
耶尔- [R

Answers:


374

trigger弹出窗口的选项设置为,hover而不是click,这是默认选项

可以使用data-*标记中的任一属性来完成此操作:

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

或带有初始化选项:

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

这是一个DEMO


谢谢回复。如何为该代码设置触发选项?<script> $(function () { $("#popover").popover(); }); </script>
Muhambi 2012年

8
@Jake:使用$("#popover").popover({ trigger: "hover" });
若昂·席尔瓦

谢谢!由于某种原因,我需要同时实现数据触发和JS初始化。
安东尼

谁能帮助我了解JS初始化或数据属性哪个是更好的选择?即使我使用数据属性,我仍然必须调用$(“#popover”)。popover();。从我的JavaScript。
Bailey

@Bailey这取决于您的编码规则以及您是否使用任何特定的编码标准,然后取决于个人喜好。看两者,我更喜欢在popover()函数中定位触发选项。对我来说似乎更具可读性。
Coderhi

33

我想补充一下,以方便访问,我认为您应该添加焦点触发器:

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


没有点击这个请求-看后的这个标题
阿尔伯克基网站设计

14

如果您也想悬停弹出窗口本身,则必须使用手动触发器。

这是我想出的:

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


1

在尝试了其中一些答案后,发现它们无法通过多个链接很好地扩展(例如,对于您所拥有的每个链接,可接受的答案都需要一行jquery),我遇到了一种需要最少代码才能工作的方法,并且至少在Chrome上,它似乎也可以完美运行。

您添加此行激活它:

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

这些锚定链接的设置:

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

在这里看到它的作用,我使用的输入与接受的答案相同,因此它在较旧的项目上应该可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.