以瀏覽器是否支援translate3d 為例說明,當然現代瀏覽器已經支援該屬性。如果瀏覽器實現了帶有字首的某個屬性,比如說支援-webkit-transform
,但是不支援直接寫transform
,可以通過檢測瀏覽器engine,給屬性加上特殊的字首
let docStyle = document.documentElement.style
let translate3d = false
let engine
if (window.opera && Object.prototype.toString.call(opera) === '[object Opera]') {
engine = 'presto'
} else if ('MozAppearance' in docStyle) {
engine = 'gecko'
} else if ('WebkitAppearance' in docStyle) {
engine = 'webkit'
} else if (typeof navigator.cpuClass === 'string') {
engine = 'trident'
}
let cssPrefix = {trident: '-ms-', gecko: '-moz-', webkit: '-webkit-', presto: '-o-'}[engine]
let vendorPrefix = {trident: 'ms', gecko: 'Moz', webkit: 'Webkit', presto: 'O'}[engine]
let helperElem = document.createElement('div')
let perspectiveProperty = vendorPrefix + 'Perspective'
let transformProperty = vendorPrefix + 'Transform'
let transformStyleName = cssPrefix + 'transform'
let transitionProperty = vendorPrefix + 'Transition'
let transitionStyleName = cssPrefix + 'transition'
let transitionEndProperty = vendorPrefix.toLowerCase() + 'TransitionEnd'
// 可能帶prefix字首也可能不帶
if (helperElem.style[perspectiveProperty] !== undefined) {
translate3d = true
}