Bootstrap 第一次悬停时的弹出窗口偏移量
Bootstrap popover offset on first hover
希望有人能提供解决这个问题的办法。我的情况是我有一个 link 具有 bootstrap 弹出效果,每次将鼠标悬停在它上面时,它都会显示一个图像。但问题是,当您第一次将鼠标悬停在 link 上时,弹出容器总是偏移。我的代码:
我自己的代码是这样的:
<a href="{% url 'consilium:detail' movie.slug %}" class="thumbnail title-link" {% if movie.image %} data-toggle="popover" data-placement="left" data-full="{{movie.image.url}}" {% endif %}>
<span class="flex-input">
<input class="get-title" value="{{ movie.title }}" form="movie{{ forloop.counter }}" name="title" readonly/>
</span>
</a>
body .popover {
max-width: 240px;
}
.hover-image {
width: 180px;
}
-
$(document).ready(function() {
$('[data-toggle="popover"]').popover({
container: 'body',
html: true,
placement: 'left',
trigger: 'hover',
content: function() {
var url = $(this).data('full');
return '<img class="hover-image" src="' + url + '">'
}
});
});
这是一个活生生的例子:
有人知道如何解决这个问题吗?
发生这种情况的原因是 Bootstrap 弹出窗口在调用后立即绝对定位在文档上。然后加载图像并更改弹出窗口高度 - 但是,弹出窗口没有重新定位。
您可以为弹出窗口设置一个最小高度,这样它就不会改变高度,因此不需要重新定位。根据您的示例图像,将 css 更改为:
body .popover {
max-width: 240px;
min-height: 160px;
}
问题是弹出窗口在图像下载之前呈现。
要解决这个问题,您可以使用 popover 插件中的 manual
选项来定义自定义悬停操作,以便在图像加载后显示弹出框,如下所示:
$this.on('mouseenter', function(){
var image = new Image();
image.onload=function(){
$this.popover('show');//Show popover after image loads
}
image.src=url; //Preload image in memory
}).on('mouseleave', function(){
$this.popover('hide');
});
});
更新见herefiddle
我的解决方案只是 show/hide 初始化工具提示。确保关闭动画,否则会有内容闪烁。如果需要动画,可以在.tooltip('hide')
后重新开启
$('.xyz').tooltip({
title: "xyz <img src='https://www.idk.com/test.png'alt='blah'/>",
html: true,
placement: 'auto',
animation: false
}).tooltip('show').tooltip('hide') //.data('bs.tooltip').options.animation=true
希望有人能提供解决这个问题的办法。我的情况是我有一个 link 具有 bootstrap 弹出效果,每次将鼠标悬停在它上面时,它都会显示一个图像。但问题是,当您第一次将鼠标悬停在 link 上时,弹出容器总是偏移。我的代码:
我自己的代码是这样的:
<a href="{% url 'consilium:detail' movie.slug %}" class="thumbnail title-link" {% if movie.image %} data-toggle="popover" data-placement="left" data-full="{{movie.image.url}}" {% endif %}>
<span class="flex-input">
<input class="get-title" value="{{ movie.title }}" form="movie{{ forloop.counter }}" name="title" readonly/>
</span>
</a>
body .popover {
max-width: 240px;
}
.hover-image {
width: 180px;
}
-
$(document).ready(function() {
$('[data-toggle="popover"]').popover({
container: 'body',
html: true,
placement: 'left',
trigger: 'hover',
content: function() {
var url = $(this).data('full');
return '<img class="hover-image" src="' + url + '">'
}
});
});
这是一个活生生的例子:
有人知道如何解决这个问题吗?
发生这种情况的原因是 Bootstrap 弹出窗口在调用后立即绝对定位在文档上。然后加载图像并更改弹出窗口高度 - 但是,弹出窗口没有重新定位。
您可以为弹出窗口设置一个最小高度,这样它就不会改变高度,因此不需要重新定位。根据您的示例图像,将 css 更改为:
body .popover {
max-width: 240px;
min-height: 160px;
}
问题是弹出窗口在图像下载之前呈现。
要解决这个问题,您可以使用 popover 插件中的 manual
选项来定义自定义悬停操作,以便在图像加载后显示弹出框,如下所示:
$this.on('mouseenter', function(){
var image = new Image();
image.onload=function(){
$this.popover('show');//Show popover after image loads
}
image.src=url; //Preload image in memory
}).on('mouseleave', function(){
$this.popover('hide');
});
});
更新见herefiddle
我的解决方案只是 show/hide 初始化工具提示。确保关闭动画,否则会有内容闪烁。如果需要动画,可以在.tooltip('hide')
$('.xyz').tooltip({
title: "xyz <img src='https://www.idk.com/test.png'alt='blah'/>",
html: true,
placement: 'auto',
animation: false
}).tooltip('show').tooltip('hide') //.data('bs.tooltip').options.animation=true