js中的运动框架

在前端开发中经常会遇到动态修改元素的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中所有数值型的属性的变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值