Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止jQuery醉醺醺地将文档推到元素鼠标上方?_Jquery_Html_Css - Fatal编程技术网

防止jQuery醉醺醺地将文档推到元素鼠标上方?

防止jQuery醉醺醺地将文档推到元素鼠标上方?,jquery,html,css,Jquery,Html,Css,我正在尝试使用tipsy 。。。将工具提示添加到页面。因此,我准备了下面发布的简单HTML示例-tipsy似乎在运行,但不幸的是,当我将鼠标移到元素上时,整个文档体被压下,这在视觉上非常令人恼火(此外,可能会导致焦点下的元素移动并丢失鼠标);这可以在下面的gif上看到,它是在Ubuntu 14.04、Firefox 43上捕获的: 在tipsy元素上执行鼠标悬停操作时,如何防止整个文档被“推下” 测试代码: <html> <head> <meta ht

我正在尝试使用
tipsy

。。。将工具提示添加到页面。因此,我准备了下面发布的简单HTML示例-
tipsy
似乎在运行,但不幸的是,当我将鼠标移到元素上时,整个文档体被压下,这在视觉上非常令人恼火(此外,可能会导致焦点下的元素移动并丢失鼠标);这可以在下面的gif上看到,它是在Ubuntu 14.04、Firefox 43上捕获的:

tipsy
元素上执行鼠标悬停操作时,如何防止整个文档被“推下”

测试代码:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta http-equiv="pragma" content="no-cache"/>
  <meta http-equiv="x-ua-compatible" content="IE=edge"/>
  <script type="text/javascript" src="../jquery-1.12.3.min.js"></script>
  <script type="text/javascript" src="../jquery.tipsy.js"></script>
  <link rel="stylesheet" type="text/css" href="../tipsy.css"/>
  <style type="text/css">
#_help_refresh {
  display:none;
}
  </style>
  <script type="text/javascript">
ondocready = function() {
  // placeholder - nothing for now...
  $("#_refresh").tipsy({fade: true, gravity: 's', html: true, title: function() {
      return $("#_help_refresh").html();
    }
  });
}
$(document).ready(ondocready);
  </script>
</head>

<body>
  <h1>Testing tipsy ...</h1>

  <div id="testholder">
    <div>Some text here:</div>
    <div>Some more text here:</div>
  </div>

  <span><img id="_refresh" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABHNCSVQICAgIfAhkiAAAAQxJREFUOI2l1DtOA0EMBuBPiGMgUBo4AQWioEAkCCpuACUSuQLcgYI+4QJ0NAREkWOkiBBCPBraFLsU6w3L7uZFfsmSx2P/Y8/YQz1a6GKAUcggbAc1/pdlwxb6SGfIEzYi5gpJkWQP3+GYoIc2miFtPMdeinfcFNbjTHKSYZBOwhE+arKkUM4Qa1NIclzXEbUK5UzLJEd+JxWibii9JUjSVeyG090MkjOcysqvxShYm3NkNBErywSXiV5C31yWqB/6yT/iO7IuP2fx589xHDEJdnLjog3ZwFvE3Bc3FhmRfbyG7yfWyw7loX3Ahb9D++i3Ib+wPem0eb6RRHbBjSlZj3GIW9WPrROlVfADiJ5vX7sneXIAAAAASUVORK5CYII="/></span>

  <span id="_help_refresh">Here is the help test that goes in the tooltip</span>
</body>

#_帮助你刷新{
显示:无;
}
ondocready=函数(){
//占位符-暂时没有。。。
$(“##刷新”).tipsy({fade:true,gravity:s',html:true,title:function(){
返回$(“##_帮助_刷新”).html();
}
});
}
$(文件).ready(ondocready);
测试醉酒。。。
这里有一些文字:
这里有更多的文字:
下面是工具提示中的帮助测试

多亏了Firebug和

基本上,当页面加载时,
中的第一个元素。Firebug显示在这种情况下
的系统CSS为:

margin block-end:0.67em
边缘块开始:0.67em

请注意,在这种情况下-当
是第一个时,Firefox会自动禁用
边距块开始
;但是当其他元素位于
之前时,Firefox会自动启用
边距块开始

因此,发生的情况是:开始时我们有
..
,然后鼠标会移动,而
酒醉的
实际上会插入一个
,作为
的第一个孩子,因此我们有
..
;因此,
不再是第一个子项,因此其
边距块开始
被启用,因此内容的“下推”变得可见

没有CSS或JS或任何东西,最简单的修复方法是插入一个空的
(或其他元素)作为
的第一个子元素,即在
前面:

。。。
测试醉酒。。。
...

然后,由于
不再是第一个子项,它将从一开始就启用
边距块开始
,因此,一旦插入相应的
div
鼠标指针,则不会更改此设置。

问题不在于html。这是一个插件。我运行了代码,注意到插件在文档顶部附加了工具提示。这会导致新添加的DOM元素在顶部占据一些空间,从而导致它下面的每个其他元素向下移动几个像素:看看
tipsy.js
第34行的代码:

$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
因此,当您将该行上的
prependTo()
方法替换为
appendTo()

tipsy在文档末尾添加了工具提示,防止在文档顶部添加新的DOM元素。因此,编辑源代码

编辑


如果您修复了特定的问题,那么如果您要在设计的其他地方调用插件,那么按照说明修改源代码可能会有所帮助。我相信在调用插件的代码的其他地方可能会出现问题,因为插件在DOM树的顶部添加了新元素。让插件在文档末尾添加这些元素应该可以限制您遇到的错误类型。

我猜是
\u help\u refresh
占用了从隐藏到显示的空间。试着给它
visibility:hidden
而不是
display:none
我正在Firefox上测试你的代码,它似乎工作得很好。谢谢你的建议,@GavinThomas-但不是这样,只是试了一下:无论如何都不会显示
\u help\u refresh
,它只是工具提示数据的一个不可见容器(在我的实际代码中,我甚至不使用隐藏元素,我通过AJAX读取文件-我只是在这里添加了隐藏元素以快速模拟)谢谢@che azeh-它是什么Firefox版本,在哪个操作系统上?我上面的gif也是在Firefox中捕获的。。。你有插件吗?我会在Firefox安全模式下尝试,看看一些插件是否会有所不同。。。编辑:在Firefox43安全模式下尝试,同样的问题;同样在Firefox 45中(没有安装插件),同样的问题……谢谢@che azeh,但我不认为元素在顶部占用了太多空间,因为它是“位置:绝对”;当我将鼠标移到Firefox inspect元素中插入的div上时,只选择了工具提示矩形本身(因此问题不是插入的元素在顶部占用空间)。这里的问题是Firefox中
元素的默认行为,正如我在我的。然而,你的修正也是有效的。
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);