2012-07-24 46 views

回答

3

我需要類似的東西。我想測試瀏覽器是否支持translate3d而不使用庫。我沒有找到任何不是webkit特有的好通用測試。所以經過多次實驗後,我想出了以下測試。我首先創建一個測試元素,爲其分配一個變換函數,然後查看元素是否保留了變換函數。

function Has3DSupport() 
{ 
    var sTranslate3D = "translate3d(0px, 0px, 0px)"; 

    var eTemp = document.createElement("div"); 

    eTemp.style.cssText = " -moz-transform:" + sTranslate3D + 
          "; -ms-transform:"  + sTranslate3D + 
          "; -o-transform:"  + sTranslate3D + 
          "; -webkit-transform:" + sTranslate3D + 
          "; transform:"   + sTranslate3D; 
    var rxTranslate = /translate3d\(0px, 0px, 0px\)/g; 
    var asSupport = eTemp.style.cssText.match(rxTranslate); 
    var bHasSupport = (asSupport !== null && asSupport.length == 1); 

    return bHasSupport; 
} // Has3DSupport 

功能是足夠快了我的需求:< 50微秒在桌面瀏覽器,< 500微秒的移動瀏覽器。

希望這會有所幫助。

+0

感謝夥計,這個偉大的工作 – Colir 2014-03-05 08:50:31

0

另一種選擇誰的作品就像一個魅力對我來說:

function has3d() { 
    var el = document.createElement('p'), 
     has3d, 
     transforms = { 
      'WebkitTransform':'-webkit-transform', 
      'OTransform':'-o-transform', 
      'MSTransform':'-ms-transform', 
      'MozTransform':'-moz-transform', 
      'Transform':'transform' 
     }; 

    // Add it to the body to get the computed style. 
    document.body.insertBefore(el, null); 

    for (var t in transforms) { 
     if (el.style[t] !== undefined) { 
      el.style[t] = "translate3d(1px,1px,1px)"; 
      has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]); 
     } 
    } 

    document.body.removeChild(el); 

    return (has3d !== undefined && has3d.length > 0 && has3d !== "none"); 
} 
相關問題