在前端开发中经常会遇到动态修改元素的style,这个时候我们设置
xxx.style.xxx = xxx;
这里还要区分他是否是非行间样式,如果是非行间样式,那么还需要用到以下的代码设置:
if(obj.currentStyle){
obj.currentStyle['xxx'] = xxx;
}else{
getComplatedStyle(obj,false)['xxx']=xxx;
}
这样,当多个地方使用的是否就会显得非常麻烦,要是能有个框架供我直接调用会显得方便的多。
那么:
function getStyle(obj, attr) {
if(obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
function startMove(obj, sAttr, iTarget) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var cur;
if(sAttr == 'opacity') {
cur = Math.round(getStyle(obj, sAttr) * 100);
} else {
cur = parseInt(getStyle(obj, sAttr));
}
var speed = (iTarget - cur) / 6;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(cur == iTarget) {
clearInterval(obj.timer);
} else {
if(sAttr == 'opacity') {
obj.style.opacity = (cur + speed) / 100;
obj.style.filter = 'alpha(opacity:' + (cur + speed) + ')';
} else {
obj.style[sAttr] = cur + speed + 'px';
}
}
}, 30);
};
这个框架涵盖了大部分的元素布局的动态变化。
获取元素属性值
getStyle(obj, attr)
参数
obj指的是你传入的元素对象,attr是目标属性。
返回值
返回obj对象所对应的attr的值
运动函数
startMove(obj, sAttr, iTarget)
参数
obj指的是你传入的元素对象,attr是目标属性。 iTarget 变化的目标值
startMove介绍
clearInterval(obj.timer);
刚进入函数我们初始化obj对象的timer
setInterval(function() {
开启一个定时器。
if(sAttr == 'opacity') {
cur = Math.round(getStyle(obj, sAttr) * 100);
} else {
cur = parseInt(getStyle(obj, sAttr));
}
因为alpha属性是float类型,兼容firefox和chrome。因此分别获取。js中没有绝对的整数,所以这里对获得的alpha进行四舍五入。打印输出 7*100就知道为什么要这样写了。
var speed = (iTarget - cur) / 6;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(cur == iTarget) {
clearInterval(obj.timer);
} else {
if(sAttr == 'opacity') {
obj.style.opacity = (cur + speed) / 100;
obj.style.filter = 'alpha(opacity:' + (cur + speed) + ')';
} else {
obj.style[sAttr] = cur + speed + 'px';
}
}
做一个减速运动的变化。
这个框架适用于修改css中所有数值型的属性的变化。