动态放置Twitter-Bootstrap popover

时间:2013-02-14 17:22:24

标签: javascript twitter-bootstrap

我正在尝试为引导程序弹出窗口创建动态位​​移功能,因此如果内容太大而无法在屏幕上显示“底部”放置而没有垂直滚动,则会向上显示“ “安置。

为此,我创建了一个函数:

function popoverPlacement(popoverHeight, element) {
    var offset = element.offset().top;
    var height = popoverHeight;
    var docheight = $(document).height();

    if (offset + height >= docheight) {
        return "top";
    }
    else {
        return "bottom"
    }
}

不幸的是,我需要将popoverHeight指定为硬编码值,因为内容是为popover生成的,而不是添加到DOM中,所以我无法获得它的高度。

这是如何使用的:

$(this).popover({
            placement: function () { return popoverPlacement(270, this.$element); },
            title: "Status",
            trigger: "click",
            content: editStatusContent,
            html: true,
            delay: {
                show: 1,
                hide: 1
            },
            animation: false
        });

有没有动态的方法来实现这一目标?

由于

2 个答案:

答案 0 :(得分:1)

您可以通过将内容附加到文档作为不可见节点来测量弹出窗口,如下所示:

var tpl = this.options.template;
var $inner_el = $(this.options.content).clone(false);
var $measure_el = $('.popover-content', tpl).append($inner_el)
                                            .parents('.popover');
$measure_el.css({
    visibility: 'hidden',
    position:   'absolute'
});

$measure_el.appendTo('body');
actual_height = $measure_el.height();
actual_width = $measure_el.width();
$measure_el.remove();

答案 1 :(得分:0)

我发现在显示工具提示后可以使用绝对定位:

$('#liveCallData').tooltip('show');
var tooltip = $('#liveCallData .tooltip');
width = tooltip.width();

定位它:

tooltip.css({'position': 'absolute', top: y - 41, left: x - (width / 2) - 1});