javascript - jQuery 元素自由旋转。在 IE 中更正 Transform Origin 和 Translate

标签 javascript internet-explorer matrix rotation transformation

我正在开发一个 jQuery 插件,使 block 级元素可以用鼠标旋转。现在它在非 IE 浏览器中按预期工作,但在 Internet Explorer 中旋转时会出现奇怪的行为。

演示托管于 testerski.antaranian.me这里,旋转插件脚本是

    $.fn.roll = function(angle){
    var $this = this,
        ie = !jQuery.support.leadingWhitespace;
    if (ie) {
        var cosAngle = parseFloat(parseFloat(Math.cos(angle.rad())).toFixed(8)),
            sinAngle = parseFloat(parseFloat(Math.sin(angle.rad())).toFixed(8)),
            tx = 0, ty = 0,
            matrixFilter = '(M11=' + cosAngle + ', ' 
                    + 'M12=' + -sinAngle + ', '
                    + 'M21=' + sinAngle + ', '
                    + 'M22=' + cosAngle + ','
                    + 'sizingMethod=\'auto expand\')',
            filter = 'progid:DXImageTransform.Microsoft.Matrix' + matrixFilter,
            css = {
                '-ms-filter': filter,
                'filter': filter                        
              };
            debug.log(filter);  
        var matrix = $M([
                  [cosAngle, -sinAngle, tx],
                  [sinAngle, cosAngle, ty],
                  [0, 0, 1]
                ]);  
        debug.log(matrix);
        $this.transformOrigin(matrix);
        $this.fixIeBoundaryBug(matrix);

    } else {
        var css = {
                '-webkit-transform': 'rotate(' + angle + 'deg)',
                '-moz-transform': 'rotate(' + angle + 'deg)',
                '-o-transform': 'rotate(' + angle + 'deg)'
              };
    }   
    $this.css(css);
    return this;            
  };

我用谷歌搜索并找到了与这个主题相关的这两个页面

Grady's guideZoltan's guide

据我所知,需要一些与线性代数相关的会计,但这对我来说很难,所以如果有人有更简单的教程,或者知道直接的解决方案,请告诉我。

任何帮助将不胜感激, 安塔拉尼亚人。

最佳答案

不幸的是,IE 的 Transform Filter 没有“transform-origin”的概念。 'auto expand' sizingMethod 将使转换后的对象占用尽可能少的空间,您需要更改它的定位。

在 cssSandpaper 中,我在转换后的对象周围放置了另一个

标签,并调整了它的 margin-left 和 margin-top。如果你去 the cssSandpaper website并查看代码,您将看到确切的公式(在 cssSandpaper.js 中搜索“setMatrixFilter”)。您可以将它硬编码到您的库中,或者您可以使用 cssSandpaper 本身来完成它(使用 cssSandpaper.setTransform() 方法)。尽管它可能会给您的代码增加几 KB,但我还是建议这样做,以防万一我在将来改进处理转换的方式。

无论如何,祝你好运!

Z.

关于javascript - jQuery 元素自由旋转。在 IE 中更正 Transform Origin 和 Translate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5105585/

相关文章:

javascript - mongodb组和总和?

javascript - Dynamic Jquery Function with Rails - 将多个函数压缩为一个

typescript - IE 11 - 抛出 'webpackJsonp' 未定义

javascript - DropzoneJS XHR 发送选项请求

c# - 更改 Internet Explorer 安全设置(初始化和脚本 activex 控件不裸...)

javascript - InnerHTML 更改适用于 Firefox,但不适用于 IE 9

javascript - 旋转后平移缓冲区

java - 在 Java 中确定辅因子矩阵

matrix - 带有图像和 xrange 的绘图矩阵出现问题

javascript - 如果过程出现错误,则更改中间进度条的颜色