在javascript中为元素设置多个样式的最有效方法是什么?
for (i=0;i<=lastSelector;i++) {
var e = mySelector[i],
v = 'opacity 1s';
e.style.WebkitTransition = v;
e.style.MozTransition = v;
e.style.OTransition = v;
e.style.MsTransition = v;
e.style.transition = v;
e.style.opacity = 0;
};
答案 0 :(得分:6)
基本上,您可以使用堆叠分配:
for (i=0;i<=lastSelector;i++) {
var e = mySelector[i];
e.style.WebkitTransition =
e.style.MozTransition =
e.style.OTransition =
e.style.MsTransition =
e.style.transition =
'opacity 1s';
e.style.opacity = 0;
}
由于我们有几个特定于供应商的版本的属性,您可能会考虑使用可重用的函数,例如:
function setMultiVendorProp(style, propName, value) {
// Set the non-vendor version
style[propName] = value;
// Make first char capped
propName = propName.substring(0, 1).toUpperCase() + propName.substring(1);
// Set vendor versions
style["Webkit" + propName] = value;
style["Moz" + propName] = value;
style["O" + propName] = value;
style["Ms" + propName] = value;
// Done
return value;
}
或者使用虚线样式,因为我们已经使用字符串而不是标识符:
function setMultiVendorProp(style, propName, value) {
// Set the non-vendor version
style[propName] = value;
// Set vendor versions
style["-webkit-" + propName] = value;
style["-moz-" + propName] = value;
style["-o-" + propName] = value;
style["-ms-" + propName] = value;
// Done
return value;
}
然后:
for (i=0;i<=lastSelector;i++) {
var e = mySelector[i];
setMultiVendorProp(e.style, "transition", "opacity 1s");
e.style.opacity = 0;
}
附注:
;
声明中的结束}
后没有for
。var
函数中的任何位置都是函数范围,因此在函数内的非函数块中声明var
会(稍微)误导代码的读者;详情:Poor, misunderstood var
答案 1 :(得分:2)
你可以试试这个:
var i,
es,
v = 'opacity 1s';
for (i=0;i<=lastSelector;i++) {
es = mySelector[i].style;
es.WebkitTransition = v;
es.MozTransition = v;
es.OTransition = v;
es.MsTransition = v;
es.transition = v;
es.opacity = 0;
};
每次循环时都不需要设置v = 'opacity 1s'
,只需在循环之前设置一次。只要我们移动v
的声明,请注意JS只有函数作用域,因此在循环中声明变量并不会将它们的作用域限制为该循环。
答案 2 :(得分:0)
也许在一个函数中:
function setStyles(styles, element, value)
{
for(var i=0,l=styles.length;i<l;i++)
{
if(p in element.style)
element.style[p] = value;
}
};
}
所以你可以打电话:
var s = ['WebkitTransition','MozTransition','OTransition','MsTransition','transition'];
for (i=0;i<=lastSelector;i++) {
var e = mySelector[i],
v = 'opacity 1s';
setStyles(s,e,v);
e.style.opacity = 0;
};