JS 运动框架2 链式运动

本文介绍了一种使用JavaScript实现链式运动的方法,通过定义`getStyle`和`startMove`函数,实现在一个运动完成后自动执行下一个运动,具体展示了如何在元素上连续改变宽度、高度和透明度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链式运动,在一个运动完成之后,执行函数,开始下一次运动
链式运动框架:

function getStyle(obj, name)
{
    if(obj.currentStyle)
    {
        return obj.currentStyle[name];
    }
    else
    {
        return getComputedStyle(obj, false)[name];
    }
}

function startMove(obj, attr, iTarget, fnEnd)//这里添加一个参数,叫fnEnd,实际是一个函数传参
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function (){
        var cur=0;

        if(attr=='opacity')
        {
            cur=Math.round(parseFloat(getStyle(obj, attr))*100);
        }
        else
        {
            cur=parseInt(getStyle(obj, attr));
        }

        var speed=(iTarget-cur)/16;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);

        if(cur==iTarget)
        {
            clearInterval(obj.timer);

            if(fnEnd)fnEnd();//这里当前面的运动停止时,执行fnEnd()这个运动
        }
        else
        {
            if(attr=='opacity')
            {
                obj.style.filter='alpha(opacity:'+(cur+speed)+')';
                obj.style.opacity=(cur+speed)/100;

            }
            else
            {
                obj.style[attr]=cur+speed+'px';
            }
        }
    }, 30);
}

实际应用例子:

    <script>
    window.onload=function()
    {
        var oDiv=document.getElementById('div1');

        oDiv.onmouseover=function()
        {
            //链式运动,一个运动完成后接着另一个运动
            startMove(oDiv,'width',800,function()
            {
                   startMove(oDiv,'height',450,function()
                   {
                          startMove(oDiv,'opacity', 100)
                   })
            })
        }

        oDiv.onmouseout=function()
        {
            startMove(oDiv,'opacity',50, function()
            {
                startMove(oDiv,'height', 100,function()
                {
                    startMove(oDiv,'width',100)
                })
            })
        }
    }
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值