2011-10-05 66 views
3

所以我搜索谷歌和stackoverflow的解決方案,但我找不到答案。我的問題是,我無法與Internet Explorer 8 旋轉的元素我用 this sitethis stackoverflow topic資源和終於來到了以下結果:JavaScript旋轉IE8

function rotateElement(e, deg) { 
    var deg_str = deg + ""; 
    var rotate_transform = "rotate(" + deg + "deg)"; 

    var degreeToIEMatrix = function(deg){ 
     var deg2radians = Math.PI/180; 
     var rad = deg * deg2radians ; 
     var costheta = Math.cos(rad); 
     var sintheta = Math.sin(rad); 

     var M11 = costheta; 
     var M12 = -sintheta; 
     var M21 = sintheta; 
     var M22 = costheta; 

     return 'M11=' + M11 + ', M12=' + M12 + ', M21=' + M21 + ', M22=' + M22; 
    }; 

    /* @cc_on 
     matrix_str = degreeToIEMatrix(deg); 
     document.write(matrix_str); 
     filter_str = "progid:DXImageTransform.Microsoft.Matrix(" + matrix_str + ", sizingMethod='auto expand')"; 
    @*/ 

    e.style["rotation"] = deg_str + "deg";  // CSS3 
    e.style.MozTransform = rotate_transform; // Moz 
    e.style.OTransform = rotate_transform;  // Opera 
    e.style.WebkitTransform = rotate_transform; // Webkit/Safari/Chrome 
    e.style["zoom"] = "1"; // ??? Probably IEs 

    /* @cc_on 
     e.style.filter = filter_str;   // IE 6/7 
     e.style.MsFilter = filter_str;   // IE 8 
    @*/ 
} 

使用Internet Explorer 8的元素不旋轉。我的代碼中是否存在錯誤,或者它不好?我知道我可以爲此使用JQuery,但我不想依賴庫。我查了一下JQuery的源碼,但在那裏找不到答案。

+0

http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/ – SLaks

+0

http://css3please.com/ – SLaks

+0

@SLaks The第一個使用librarys,第二個使用css(在後面使用JQuery)。 – Olesma

回答

6
function rotate(angle, elem){ 
     if (angle >= 0) { 
     var rotation = Math.PI * angle/180; 
    } else { 
     var rotation = Math.PI * (360+angle)/180; 
    } 
     var c = Math.cos(rotation), 
     s = Math.sin(rotation); 
     elem.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11="+c+",M12="+(-s)+",M21="+s+",M22="+c+",SizingMethod='auto expand')"; 
} 

這只是針對IE! ;)

+1

嗯,我認爲這與我的有條件的評論有關:S所以這實際上是一個很好的答案:)謝謝! – Olesma

+0

你甚至不需要if:只是總是使用第二個分支。 – aredridel

+0

如果你這樣做,使用這條線會更安全: 'var rotation = Math.PI *(360 +(angle%360))/ 180;' – nirazul