写了一个动画函数,发现如果将elm.style[attr]改为elm.style.attr后;函数就失去作用了,why?
function animation(elm,attr,from,to){
var distance = Math.abs(to - from);
var attr = attr;
//假设动画50ms一次
var stepLength = distance / 50;
var sign = (to - from) / distance;
var offset = 0;
function step(){
offset = offset + stepLength;
if(offset < distance){
elm.style[attr] = from + offset * sign + 'px';
} else {
elm.style[attr] = to + 'px';
clearInterval(Interval);
}
}
var Interval = setInterval(step, 20);
}
这个问题是这样的,原本
elm.style
是一个对象,你想知道两种调用方式有什么不同。JavaScript中对象属性有两种调用方式,一种是点
"."
一种是"[]"
。一般情况下我们使用点调用属性的方式,但是当obj的某个属性是一个变量时(你的attr在这里是一个字符串),这种点调用的方式就行不通了,想想看
obj.'property'
这样的方式不对;所以,如果对象内的属性是一个变量,只能使用[]调用。