【发布时间】:2013-03-06 05:12:10
【问题描述】:
我正在使用 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) 时,它不再从单击的点正确拖动。
【问题讨论】:
-
如果你能用这个准备一个 jsFiddle 会很好:)
-
@Lipis 我添加了一个 jsfiddle 示例
-
我喜欢这个问题......但它很复杂,比如我怎样才能知道我的独角兽一边吃菠菜一边飞的速度:D
-
@Ahmad Alfy 是的!因此赏金
标签: javascript jquery css jquery-events css-transforms