【问题标题】:Bootstrap popover offset on first hover第一次悬停时的引导弹出窗口偏移
【发布时间】:2017-03-20 10:40:51
【问题描述】:

我希望有人可以为这个问题提供解决方案。我的情况是我有一个具有引导弹出效果的链接,每次将鼠标悬停在它上面时,它都会显示一个图像。但问题是,当您第一次将鼠标悬停在链接上时,popover 容器总是偏移。我的代码:

我自己的代码是这样的:

 <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 + '">'
    }
 });
});

这是一个活生生的例子:

Fiddle

有人知道怎么解决吗?

【问题讨论】:

    标签: javascript html css bootstrap-popover


    【解决方案1】:

    发生这种情况的原因是,Bootstrap 将弹出框在调用后立即定位在文档上。然后加载图像,更改弹出框高度 - 但是,弹出框没有重新定位。

    您可以为弹出框设置一个最小高度,这样它就不会改变高度,因此不需要重新定位。根据您的示例图像,将 css 更改为:

    body .popover {
        max-width: 240px;
        min-height: 160px;
    }
    

    【讨论】:

      【解决方案2】:

      问题是弹出框是在图像下载之前呈现的。

      要解决这个问题,您可以使用弹出框插件中的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');
          });
      });
      

      更新小提琴见here

      【讨论】:

        【解决方案3】:

        我的解决方案只是在初始化时显示/隐藏工具提示。确保关闭动画,否则会有内容闪现。如果需要动画,可以在.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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多