我正在构建工具提示,如果您将鼠标悬停在标记上,则会显示工具提示。
HTML:
<div class="trigger" data-loc="locationE" id="locationE">
<div class="tooltip">
<h2>Here is a title</h2>
<p>Here is some Compy About this location</p>
<h3>215.237.9932</h3>
</div>
</div>
JQuery的:
$(document).ready(function() {
$(".tooltip").each(function() {
toolHeight = $(this).outerHeight();
toolHeightPlus = $(this).outerHeight() + 20;
$(this).css({
"top": -+toolHeight
});
});
$(".trigger").hover(function() {
$("#" + $(this).data("loc") + " .tooltip").stop().animate({
"opacity": "1",
"top": -+toolHeightPlus
});
}, function() {
$("#" + $(this).data("loc") + " .tooltip").stop().animate({
"opacity": "0",
"top": -+toolHeight
});
});
});
我在这里不需要提到我使用data属性的原因,因为它是应用程序的另一部分。我遇到的问题是当用户将鼠标悬停在工具提示所在的位置时,即使不透明度为0,用户也会触发工具提示动画。我希望工具包仅在用户悬停在.trigger
上时触发不透明度为零的.tooltip
。我该如何做到这一点?
答案 0 :(得分:0)
将工具提示标记移出触发器。由于触发器div正在包装工具提示,它实际上是弹出工具提示。如果您打算仅将鼠标悬停在触发器上,那么请将它们分开。
答案 1 :(得分:0)
您的HTML请求看起来有问题,因为您的HTML中只有.trigger
的空格,所以在我看来,除非您向.trigger
添加更多内容,否则您的请求永远不会有效不是.tooltip
元素的元素。
如果您确实为.trigger
元素添加了更多空间,那么我可以查看target of the event并在执行之前查看它是否具有这样的正确类:
$(".trigger").hover(function(e) {
if (!$(e.target).hasClass(".trigger")) return;
$("#" + $(this).data("loc") + " .tooltip").stop().animate({
"opacity": "1",
"top": -+toolHeightPlus
});
}, function(e) {
$("#" + $(this).data("loc") + " .tooltip").stop().animate({
"opacity": "0",
"top": -+toolHeight
});
});
答案 2 :(得分:0)
一个选项是将工具提示css显示设置为隐藏时设置为“无”,并在显示时设置为“阻止”。这样可以防止.tooltip html元素在不可见的情况下占用任何空间。