链式运动

本文探讨了使用JavaScript实现链式动画的方法,通过鼠标悬停和移出事件触发元素宽度、高度及透明度的平滑变化。介绍了回调函数在动画序列中的应用,确保一个动画结束后再启动下一个动画。

在这里插入图片描述

var aDiv = document.getElementsByTagName("div");
            /*
              链式运动:
                  在一个动画结束的时候,开始第二个动画。
                  【注】关键点,找到第一个动画结束的时候
            */

            aDiv[0].onmouseover = function(){
                //宽变为300
                starMove(this,"width",300,function(){
                    starMove(this,"height",300,function(){
                        starMove(this,"opacity",100);
                    })
                });

                
            }
            aDiv[0].onmouseout = function(){
                //宽变为300
                starMove(this,"opacity",30,function(){
                    starMove(this,"height",100,function(){
                        starMove(this,"width",100);
                    })
                });

                
            }
            /*
              回调函数:我们把函数当作参数传入,并且在合适调用的方式,叫做回调函数,在别的编程语言叫做(c语言、c++)叫做函数指针
            */
            
            function starMove(node,attr,iTarget,complete){
                clearInterval(node.timer);
                node.timer = setInterval(function(){
                    //计算速度
                    if(attr=="opacity"){
                        iCur = parseInt(parseFloat(getStyle(node,"opacity"))*100);
                    }else{
                        iCur = parseInt(getStyle(node,attr));
                    }
                    var speed = (iTarget - iCur) / 8;
                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                    if(iCur == iTarget){
                        clearInterval(node.timer);
                        if(complete){
                            complete.call(node);
                        }
                        // alert("运动结束了");
                        /*
                           当运动结束以后,应该做什么的代码在这里不能写死
                           【注】封装函数。形参,根据函数不确定的值确定
                           可以将一段代码编写的权力交给别人,声明一个形参,这个形参是用来接收从外面封装好的一个函数的
                        */
                    }else{
                       if(attr=="opacity"){
                           iCur += speed;
                           node.style.opacity = iCur / 100;
                           node.style.filter = "alpha(opacity=" + iCur +")"
                       }else{
                        node.style[attr] = iCur + speed + "px";
                       }
                    }
                },30);

            }
            //获取当前有效样式浏览器兼容写法
            function getStyle(node,cssStr){
                return node.currentStyle ? node.currentStyle[cssStr]:getComputedStyle(node)[cssStr];
            }

在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值