javascript - 具有相同坐标的JS div具有不同的偏移量

标签 javascript html css

在客户点击指向 map 上某个位置的小点状 div(7x7 像素黑色背景)后,我试图显示带有一些信息的 div。它有效,但点状 div 和信息 div 之间的距离在每个点信息对中是不同的。

这是 HTML/JS 脚本。请不要介意所有 JavaScript 和 CSS 都在同一个文件中,这样做是为了简单起见,最近会更改。

<html>
<head>
<meta charset="utf8" />
</head>
<body>

<div id="pointer_div" 
onclick="getClickPosition(event)" 
style="position:absolute; top:1px; left:1px; border: 1px solid black;
   background-repeat: no-repeat; width: 1146px; height: 714px;" >

  <div id="sofia"
  onclick="showForecast('Sofia_381_178')"
  style="position:relative; top: 381px; left: 178px;
  background:black; width: 7px; height: 7px;" ></div>

  <div id="plovdiv"
  onclick="showForecast('Plovdiv_512_435')"
  style="position:relative; top: 512px; left: 435px;
  background:black; width: 7px; height: 7px;" ></div>

  <div id="ruse"
  onclick="showForecast('Ruse_77_662')"
  style="position:relative; top: 77px; left: 662px;
  background:black; width: 7px; height: 7px;" ></div>

  <div id="result_data" 
  style="visibility:hidden; width:300px; height:100px; 
         border: 1px solid black; background:white;"/></div>
</div>

<script language="JavaScript">

function showForecast (strr) {
var splits = strr.split('_');
var xcoord = splits[2];
var ycoord = splits[1];

  if (xcoord>810) xcoord= xcoord-300;
  if (ycoord>610) ycoord= ycoord-100;

var resultDiv= document.getElementById("result_data");
resultDiv.style.visibility="visible";
resultDiv.style.position = "relative";
resultDiv.style.left = xcoord;
resultDiv.style.top = ycoord;
resultDiv.innerHTML = 'Forecast for: ' + splits[0];
};

</script>
</body>
</html>

因此,当我单击 div“plovdiv”时,信息 div 出现在点 div 下方约 30px 处,但是当我单击“ruse”时,信息 div 显示在点正下方。我在 Firefox 和 SeaMonkey 浏览器中都进行了检查,它们的行为相同。

我试图将脚本放在 jsfiddle 中,但它在页面左上角显示了所有信息 div,我无法解决这个问题。无论如何,如果有人感兴趣的话,就在这里jsfiddle .

信息 div 的坐标以字符串形式传递给 JS 函数,它们与点 div 的坐标相同(我将 css 保留在 html 文件中的原因之一)。我希望对 JS 有更好理解的人能够解释这一点。

最佳答案

这是因为您在 div 上使用了 position:relative,这会将它们从默认位置移开。所以(因为 div 是一个 block 元素)ruse 将在 plovdiv 下,而 plovdiv 将在 sofia 下,然后它们被 topleft 值移动。将它们全部设置为 position: absolute 并且它们将表现一致。

这是您在 jsfiddle 中运行的代码(我在您的 js 中添加了 px 单位):https://jsfiddle.net/wkz6dj04/5/

#sofia {
  position: absolute;
  top: 381px;
  left: 178px;
  background: black;
  width: 7px;
  height: 7px;
}

#plovdiv {
  position: absolute;
  top: 512px;
  left: 435px;
  background: black;
  width: 7px;
  height: 7px;
}

#ruse {
  position: absolute;
  top: 77px;
  left: 662px;
  background: black;
  width: 7px;
  height: 7px;
}

这是使用上述修改后的代码:https://jsfiddle.net/wkz6dj04/6/

如果你想要间隙回来,我建议在你的 #result_data 上使用 margin-top 就像这个 fiddle :https://jsfiddle.net/wkz6dj04/7/

关于javascript - 具有相同坐标的JS div具有不同的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676748/

相关文章:

html - 无法使外部样式表工作

html - CSS 文本对齐中心不起作用

javascript - 在音频元素中选择

javascript - 在javascript中获取突出显示的文本作为节点

javascript - 在 Handlebars 中的另一个辅助函数中使用一个辅助函数的结果

html - 可变边的三栏网页设计

html - 如何用图像填充提交按钮?

javascript - 动态绑定(bind)事件处理程序的最有效方法

javascript - Jquery 在搜索表单上加载图像

html - RegEx 匹配除 XHTML 自包含标签之外的开放标签