使用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");