我正在使用 CSS 变换比例在 div 上创建平滑缩放。问题是即使按比例放大,我也希望能够获得相对于 div 的正确鼠标位置,但我似乎可以找出正确的算法来获取这些数据。我正在从以下位置检索当前比例因子:
var transform = new WebKitCSSMatrix(window.getComputedStyle($("#zoom_div")[0]).webkitTransform);
scale = transform.a;
当我在各种比例设置下读取 div 的位置时,它似乎报告了正确的位置,即当我缩放 div 直到屏幕更大时,左侧和顶部的位置值为负并且看起来是正确的,就像返回比例值:
$("#zoom_div").position().left
$("#zoom_div").position().top
为了获得当前的鼠标位置,我正在从点击事件中读取 x 和 y 位置并移除偏移量。这在比例值为 1(无比例)时正常工作,但在 div 放大时不能正常工作。这是我的基本代码:
$("#zoom_div").on("click", function(e){
var org = e.originalEvent;
var pos = $("#zoom_div").position();
var offset = {
x:org.changedTouches[0].pageX - pos.left,
y:org.changedTouches[0].pageY - pos.top
}
var rel_x_pos = org.changedTouches[0].pageX - offset.x;
var rel_y_pos = org.changedTouches[0].pageY - offset.y;
var rel_pos = [rel_x_pos, rel_y_pos];
return rel_pos;
});
我已经多次尝试将比例因子相乘除以 pageX / Y 或从中减去比例因子,但没有任何运气。谁能帮我弄清楚如何获得正确的价值。
(我已经从原始代码简化了我的代码,希望使我的问题更清楚,您在上面的代码中可能发现的任何错误都是由于向下编辑造成的。我的原始代码除了鼠标位置问题外)。
为了说明我在说什么,我做了一个快速的 jsfiddle 示例,它允许使用 translate3d 拖动 div。当比例正常 (1) 时,div 被拖动到单击的位置。当 div 放大 (2) 时,它不再从单击的点正确拖动。