javascript - 矩阵缩放/从点平移

标签 javascript css math matrix

我正在尝试缩放图像并使其从原点正确平移(基本上是捏合缩放)。我正在尝试找到一个不涉及更改 transform-origin 的解决方案,因为它会使查找图片的左/上边缘变得复杂,我使用它的不仅仅是这个问题.

这更像是一道数学题。 我无法想出一个方程式来确定根据原点平移多少图像。我计算出的当前方程式不能正确地从一个点开始缩放。关于演示,当使用鼠标滚动时,图像应该爆炸从鼠标指针开始。

我不是在寻找解决方法或替代设计。如前所述,我无法修改 transform-origin 属性。

演示:https://jsfiddle.net/dook/ort0efjd/

矩阵变换函数

function transform() {
  var matrix = [dim.new_scale, 0, 0, dim.new_scale, dim.new_x, dim.new_y].join(",");

  image_center.css({
    "transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
    "-webkit-transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
    "-moz-transform": "matrix(" + matrix + ") translate3d(0, 0, 0)",
  });
}

鼠标滚轮事件

// Determine mousewheel pointer in relation to picture origin
var offset = image_center.offset();
var originX = ev.originalEvent.pageX - offset.left;
var originY = ev.originalEvent.pageY - offset.top;

// truncated --- new_scale is modified

// Translate based on pointer origin -- This is where I need help
dim.new_x = originX + dim.height * (dim.new_scale - 1);
dim.new_y = originY + dim.height * (dim.new_scale - 1);

// truncated -- Keep image within constraints

transform(); // Applies everything in dim to CSS transform matrix

最佳答案

一个简单的方法是创建一个屏幕外的对象并将它的变换原点居中。将缩放应用于此对象。

然后将矩阵转换从屏幕外元素复制到屏幕上元素,您应该具有正确的比例。

下面是复制矩阵的一些图像原型(prototype):

HTMLImageElement.prototype.getMatrix = function() {
    var st = window.getComputedStyle(this, null);
    return st.getPropertyValue("-webkit-transform") ||
        st.getPropertyValue("-moz-transform") ||
        st.getPropertyValue("-ms-transform") ||
        st.getPropertyValue("-o-transform") ||
        st.getPropertyValue("transform") ||
        'none';
};

HTMLImageElement.prototype.setMatrix = function(matrix) {
    this.style.webkitTransform = 
    this.style.msTransform = 
    this.style.MozTransform = 
    this.style.OTransform = 
    this.style.transform = 
         matrix;
  return this;
};

getMatrix 返回矩阵字符串。 setMatrix 采用矩阵字符串。

targetImage.setMatrix(sourceImage.getMatrix())

were targetImage是显示的图片 sourceImage 是离屏图像

关于javascript - 矩阵缩放/从点平移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34713607/

相关文章:

javascript - Apollo 客户端 : keeping data from previous query while waiting for next fetching

javascript - Ionic fab 按钮在 App 中显示不正确

javascript - 在保留其他值的同时更改 CSS3 的翻译?

math - 两条弧的交点? (弧 = 一对角之间的距离)

javascript - 正则表达式 - 忽略内部 word + html

css - 修改后的 h1 字体大小

html - 为什么不 !Important 在这里覆盖以前的设置

python - pandas - 选择一对连续的行匹配条件

java - 使递归函数迭代

javascript - 如何将随机脚本注入(inject)到我的 Web 应用程序中?