我已经解决了这个问题
正如在放大输入图像时所解释的那样,Internet Exploder 无法发送正确的点击坐标。相反,它以像素为单位发送实际的点击坐标,这通常在真实的未缩放图像区域之外。
您不能(据我所知)从 javascript 访问点击坐标,它是在提交过程中自动分配和发送的。
解决方案是等到最后一刻并计算“缩放因子”将其发送到服务器,然后调整服务器上的坐标。
在表单中添加以下 javascript(假设为 jquery)
注意:deviceXDPI 从 ie 6 开始就已经存在
<script>
// return the screens scale factor used for IE
function getScaleFactorX(elem_id) {
var nscalefactor = 1;
try {
if (screen.deviceXDPI){
nscalefactor = screen.deviceXDPI / screen.logicalXDPI;
$("#" + elem_id).val( nscalefactor );
} else {
$("#" + elem_id).val( 1 );
}
} catch (e) {
// fail silently
}
return nscalefactor;
}
</script>
添加合适的隐藏字段,将缩容带回服务器
<input type="hidden" id="scalefactor" name="scalefactor" value="1">
添加一个操作,以便在单击图像时计算比例因子
<input name="img" type="image" src="image.png" width="400" height="200" alt="Please click" onclick="getScaleFactorX('scalefactor'); return true;" />
在图像 onclick 处理程序上执行此操作允许用户在加载表单之后和提交之前缩放屏幕。如果您过早填充此字段,用户可能会稍后缩放图像,并且比例因子将是错误的。
在服务器上
// scale the click points
if ($scalefactor) {
$x = (int)($x / $scalefactor);
$y = (int)($y / $scalefactor);
}
这假设缩放在 x 和 y 方向上是相同的,这对于缩放的网页来说是一个好的假设。也会有舍入误差,所以如果你需要完美像素,你需要考虑到这一点
直流