【发布时间】:2015-12-28 12:05:05
【问题描述】:
我有一个热图应用程序并存储我存储单击的 x、y 坐标以及视口宽度和高度。 2次点击的真实数据:
x, y, width, height
433, 343, 1257, 959
331, 823, 1257, 959
问题是当我在响应式网站上调整屏幕大小时,显示的点击现在全部关闭。我的搜索结果是空的,但是是否有公式或算法可以重新计算不同分辨率的 x 和 y 坐标。例如,第一次点击,如果width 从1257 变为990 并且height 从959 变为400,我如何重新计算x 和y 使它们在同一个地方?
编辑:
我在数据库中添加了 2 个字段,width_percentage 和 height percent
存储宽度的x 百分比和高度的y 百分比。所以如果x 是 433 并且屏幕宽度是 1257 那么x 是屏幕左边缘的 35%。然后我对高度使用相同的理论并运行计算,但它没有将点击点缩放到与我相同的位置,尽管百分比可以用于缩放分辨率。我通过单击全分辨率 1257 宽度然后以 900 宽度重新打开来对此进行测试。有关以较低分辨率显示点击点的代码,请参见下文。
Ajax PHP
while ($row = mysql_fetch_array($results)) {
if( $_GET['w'] < $row['width'] ) {
$xcorr = $row['width_percentage'] * $_GET['w'];
$ycorr = $row['y'];
}
}
这使用$_GET 变量,在页面加载时传递屏幕分辨率的宽度和高度。然后它从数据库中获取点击点为$results。由于我只将分辨率宽度从 1257 缩放到 900,因此我没有计算高度及其与初始点击相同的像素。我将新宽度乘以百分比并将点设置为屏幕左侧的百分比边距。由于百分比是 35%
新的 x 坐标从左边缘变为900 *.35 = 315px。它没有用,我仍在摸不着头脑,以使响应式网站的点击保持在同一个位置。
【问题讨论】:
-
你需要展示一些代码。但是,可能的解决方案是向
document添加一个resize侦听器,并使用element.getBoundingClientRect()做一些魔术。请参阅以下问题的答案:Retrieve the position (X,Y) of an HTML element -
除了x.y坐标外,还要保存事件的目标元素。现在在文档上保留一些调整大小的侦听器,并在调整大小事件时重新计算已保存元素的 x,y 坐标。
-
您确定您在
$row中获得了正确的值吗?试试var_dump($row)。另外:“它不起作用”是什么意思?这次的结果如何?还是和以前一样,还是别的什么? -
让我做一些转储并重新测试,然后让你知道结果。
-
我可以在哪里进行调试
标签: javascript jquery coordinates heatmap