使用javascript获取CSS转换的供应商前缀有什么问题?

使用javascript获取CSS转换的供应商前缀有什么问题?,javascript,css,cross-browser,css-transitions,Javascript,Css,Cross Browser,Css Transitions,我不仅希望检测转换支持,还希望通过一个函数调用设置正确的前缀。这样做会有什么明显的问题吗 function getTransitionPrefix() { var el = document.getElementsByTagName("body")[0], cssDec = (typeof window.getComputedStyle === "undefined") ? {} : window.getComputedStyle(el,null), transition = typeof c

我不仅希望检测转换支持,还希望通过一个函数调用设置正确的前缀。这样做会有什么明显的问题吗

function getTransitionPrefix() {
var el = document.getElementsByTagName("body")[0],
cssDec = (typeof window.getComputedStyle === "undefined") ?  {} : window.getComputedStyle(el,null),
transition = typeof cssDec.WebkitTransition !== "undefined" ? "Webkit" : 
typeof cssDec.MozTransition !== "undefined"  ? "Moz":
typeof cssDec.msTransition !== "undefined" ? "ms" :
typeof cssDec.OTransition !== "undefined" ? "O" : false;
return transition;
}

我没有发现任何错误,但我可能会这样做:

function getTransitionPrefix() {
    var el = document.createElement( "div" ),
        prefixes = ["Webkit", "Moz", "O", "ms"];
    for ( var i = 0; i < prefixes.length; i++ ) {
        if ( prefixes[i] + "Transition" in el.style ) {
            return prefixes[i];
        }
    }
    return "transition" in el.style ? "" : false;
}

请在这里查看我的完整答案

我建议您使用以下方法:

function getPrefixed(prop){
    var i, s = document.body.style, v = ['ms','O','Moz','Webkit'];
    if( s[prop] == '' ) return prop;
    prop = prop[0].toUpperCase() + prop.slice(1);
    for( i = v.length; i--; )
        if( s[v[i] + prop] == '' )
            return (v[i] + prop);
}

var transition = getPrefixed("transition");

这将确保
转换
变量将指向正确的语法。

不确定您正试图做什么,但特定于浏览器的CSS属性前缀是:
-webkit-
-moz-
-ms-
-o-
@Strelok in JavaScript,变量不能有破折号,所以它们被做成
Webkit
Moz
ms
O
@WilliamVanRensselaer,是的,这是正确的,但他所做的是返回字符串作为前缀。我想这是不可能告诉他将要使用它们做什么,因为他没有提供任何代码。这甚至不是一个真正的问题,OP在问什么。@Strelok他可能打算使用前缀字符串通过JavaScript设置转换<代码>元素样式[pref+“Transition”]=“Transition settings”@WilliamVanRensselaer我打算这样设置元素样式。我在使用
style
属性时遇到了问题,而不是获取
getComputedStyle
,但我再也看不到它了。对于在元素
CSSStyleDeclaration
中查找键,我假设这两种方法在功能上是等效的。这是我的OP问题的一部分,以及我的“棘手”三元运算符(回想起来看起来很凌乱)是否成立。谢谢,我认为你的回答很好。我不想IE得到任何过渡效果。我基本上想写一个带有
style
设置的转换列表。当列表运行时,IE应在所有转换的终点呈现元素(例如,在元素完成移动、褪色等之后)。我不希望IE在没有转换支持的情况下进行任何移动,但它将为IE10的
msTransition
提供未来的证明,也许这个
setTransition
函数应该期待另一个参数,该参数将定义要转换的属性,可能还有第三个
回调
参数,当浏览器触发大量的
转换事件时运行。谢谢你的灵感,我会看看我能做些什么。另外,我对你的
设置转换有点困惑。。。为什么需要将其包装在
iLife
中?如果浏览器需要前缀,则
getTransitionPrefix
方法将返回前缀;如果浏览器支持转换但不需要前缀,则返回空字符串;如果不支持,则返回false。然后,
setTransision
将检查(在if语句中)是否支持转换,如果支持,则设置转换。因此,在IE6-9的情况下,不会设置转换,因为没有支持。
function getPrefixed(prop){
    var i, s = document.body.style, v = ['ms','O','Moz','Webkit'];
    if( s[prop] == '' ) return prop;
    prop = prop[0].toUpperCase() + prop.slice(1);
    for( i = v.length; i--; )
        if( s[v[i] + prop] == '' )
            return (v[i] + prop);
}

var transition = getPrefixed("transition");