javascript - 工具提示 css 在 li 中的绝对位置

标签 javascript html css tooltip

我有一个工具提示,我使用的是 JS 和 CSS 但是当它在 <li> 中时它显示在页面左侧,而不是图像旁边,就像它应该的那样。

任何想法,当不在 <li> 中时它工作正常. 下面是代码

JS代码

this.showTooltip = function (a, b) {
    $("#" + b).css("left", $(a).position().left + 20 + "px");
    $("#" + b).css("top", $(a).position().top + "px");
    $("#" + b).fadeIn("slow")
};
this.hideTooltip = function (a) {
    $("#" + a).fadeOut("slow")
};
this.formSubmit = function (a) {
    $("#orderform")[0].submit()
};
this.mainPageShow = function (b, a) {
    $("#header_" + b).hide();
    $("#header_" + a).show()
}

CSS 代码

.tooltip {
    position: absolute;
    z-index: 100;
    padding: 10px;
    border: solid 1px #dadada;
    background-color: #f9f9f9;
    width: 200px;
}

HTML代码

<ul>
    <li><img onmouseover="showTooltip(this,'a');" onmouseout="hideTooltip('a');" alt="Tooltip" src="img/content/question.gif" width="20" height="20" align="left" />A</li>
    <li><img onmouseover="showTooltip(this,'b');" onmouseout="hideTooltip('b');" alt="Tooltip" src="img/content/question.gif" width="20" height="20" align="left" />B</li>
    <li><img onmouseover="showTooltip(this,'c');" onmouseout="hideTooltip('c');" alt="Tooltip" src="img/content/question.gif" width="20" height="20" align="left" />C</li>
</ul>

<div class="tooltip" id="a" style="display: none;">A test</div>
<div class="tooltip" id="b" style="display: none;">B test</div>
<div class="tooltip" id="c" style="display: none;">C test</div>

最佳答案

您可以通过删除内联 JS 代码等来简化您的逻辑。下面是一个工作示例。

HTML:

<ul>
    <li data-tooltip="Tooltip explanation for A"><span>Question A</span></li>
    <li data-tooltip="Tooltip explanation for B"><span>Question B</span></li>
    <li data-tooltip="Tooltip explanation for C"><span>Question C</span></li>
</ul>
<div id="tooltip" class="nd"></div>

CSS:

#tooltip {
    background: #eee;
    border: 1px solid #bbb;
    padding: 5px;
    position: absolute;
}
.nd {
    display: none;
}

JS:

$(function() {
    var tooltip = $("#tooltip");
    $('[data-tooltip]').bind('mouseover', function() {
        var $this = $(this), offset = $this.offset(), posX = offset.left, posY = offset.top;
        posX += $this.find('span').innerWidth();
        tooltip.
            css({left: posX + "px", top: posY + "px"}).
            text($this.attr('data-tooltip')).
            removeClass("nd");
    }).bind('mouseout', function() { tooltip.addClass('nd'); });
});

jsfiddle 链接:http://jsfiddle.net/4s9Uz/

如您所见。这很简单。关于这种方法有一些限制和意见:

  • 当元素位于具有溢出规则(具有可滚动内容的元素)内时,它可以正常工作。
  • 如果元素靠右太远,工具提示将超出视口(viewport)并强制浏览器显示水平滚动条。
  • 在这种情况下,您需要像我一样使用 span,使工具提示在其内容结束后立即出现。如果 span 标签中的内容有多行,它可能无法正常工作。但应该确认一下。
  • 您只需要带有 data-tooltip 属性的元素,以及您想要显示的文本。如果您想显示文本以外的任何内容,则需要改进此方法。

但至少你有一些东西可以陪伴并进一步提高。

关于javascript - 工具提示 css 在 li 中的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23088642/

相关文章:

html - IE6中的绝对定位,使用left : 0; and right: 0; simultaneously

javascript - jquery 就绪和调整大小功能不起作用

jquery - 在 jquery 中更改多个 div 位置

html - 高度为 100% 的两列布局。一根固定柱和一根流体柱

javascript - 如何将三个对象传递给只需要两个对象的函数?

javascript - 为什么 Visual Studio 不能折叠包含 Razor 语法的 Javascript 函数?

css - 复选框需要与标签标记对齐

html - 如何在不影响文本的情况下为 div 类中的图像进行过渡?

javascript - 如何根据内容调整容器的大小而不重复相同的代码行?

javascript - AngularJS:将数据发布到服务器