如何确保工具提示保持在浏览器可见区域内?

时间:2016-12-01 08:00:19

标签: javascript html css

我正在学习如何根据w3schools tutorial创建工具提示。

我遇到的一个问题是,当悬停文本靠近浏览器边缘并且工具提示显示在可见区域之外时,工具提示的可见性。

有没有一种标准方法可以防止这种情况(欢迎任何approch(CSS,JS,...))?
我现在的想法是根据屏幕的大小和工具提示锚的位置来计算工具提示的坐标 - 但我想避免重新发明轮子。

扩展到顶部或底部的工具提示就足够了 - 也许有一个“完全可见”的检查可以做出决定方向吗?这将是类似于SO中的工具提示中的内容:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要计算工具提示的位置是否在窗口之外。在下面的示例中,我只是在这种情况下将.bottom添加到.tooltiptext

计算结果如下:

$('.tooltip').offset().top - $('.tooltiptext').height() < 0

在这种情况下,我们应该添加该类。

完整的例子:

$('.tooltip').on('mouseenter', function() {
  var $this = $(this);
  var tooltip = $(this).find('.tooltiptext');
  var offset = $this.offset();

  tooltip.toggleClass('bottom', offset.top - tooltip.height() < 0);
  // - just for case you want to change the default behavior - tooltip.toggleClass('top', $(window).height() + tooltip.height() < 0);
});
.footer {
  position: absolute;
  bottom: 0;
  text-align: center;
  padding-bottom: 10px;
  width: 100%;
}
<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.jquery.com/jquery-2.1.4.js"></script>

    <style>
      .tooltip {
        position: relative;
        display: inline-block;
        border-bottom: 1px dotted black;
      }

      .tooltip .tooltiptext {
        visibility: hidden;
        width: 120px;
        background-color: #555;
        color: #fff;
        text-align: center;
        border-radius: 6px;
        padding: 5px 0;
        position: absolute;
        z-index: 1;
        left: 50%;
        margin-left: -60px;
        opacity: 0;
        transition: opacity 1s;
        bottom: 125%;
      }

      .tooltip .tooltiptext.bottom {
        bottom: auto;
        top: 125%;
      }

      .tooltip .tooltiptext::after {
        content: "";
        position: absolute;
        top: 100%;
        left: 50%;
        margin-left: -5px;
        border-width: 5px;
        border-style: solid;
        border-color: #555 transparent transparent transparent;
      }

      .tooltip:hover .tooltiptext {
        visibility: visible;
        opacity: 1;
      }
    </style>
  </head>
  <body style="text-align:center;">
    <div class="tooltip">Hover over me
      <span class="tooltiptext">Tooltip text</span>
    </div>

    <h2>Tooltip</h2>
    <p>Move the mouse over the text below:</p>

    <div class="footer">
      <div class="tooltip">Hover over me
        <span class="tooltiptext">Tooltip text</span>
      </div>
    </div>
  </body>
</html>

http://output.jsbin.com/nemebob

我让你将箭头方向改为顶部。