JS基础知识——运动框架

运动框架及应用
在开始运动时要关闭定时器
把运动和停止分割开(if/else)

缓冲运动
距离大速度大,距离小速度小
speed=(300-oDiv.offsetLeft)/10
像素只能精确到个位不能有小数点,会舍去小数点

Math类
Math.ceil 向上取整
Math.floor 向下取整

从左往右速度要向上取整
从右往左速度要向下取整

Math.round()四舍五入取整数

右下角悬浮框
    window.onscroll=function(){
         var oDiv.document.getElmentById('div1');
         var scrollTop=doucument.documentElement.scrollTop;

         oDiv.style.top=doucument.doucument.Element.clinetHeight-oDiv.offsetHeight+scrollTop+'px';
    }

多物体运动框架
var obj[i].timer=null
给每个标签都加一个定时器

多物体不能有公用属性

offsetWidth BUG:会算入盒模型的整体宽度,做运动的时候要谨慎处理,最好在行间样式写width直接获取其宽度来做运动

    function startMove(obj,attr,iTarget){
        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)/6;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            if(cur==iTarget){
                clearInterval(obj.timer);
            }
            else{
                if(attr=='opacity'){
                    obj.style.filter='alpha(opacity:(cur+speed))';
                    opacity=(cur+speed)/100;
                }
                else{
                    obj.style[attr]=cur+speed+'px';
                }
                
            }
        },30)
    } ;

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

改进:function startMove(obj,attr,iTarget,fnEnd)
//fnEnd是指执行完此运动之后继续执行的函数

完美运动框架

        // strartMove(oDiv,{width:400,height:500})

        function startMove(obj,json,fnEnd){
        clearInterval(obj.timer);
        obj.timer=setInterval(function(){
            for(var attr in json){
                var isStop=true;

                var cur=0;
                if(attr=='opacity'){
                    cur=Math.round(parseFloat(getStyle(obj,attr))*100);
                }
                else{
                    cur=parseInt(getStyle(obj,attr));
                }
                if(cur!=json[attr]){
                    isStop=false;
                }

                var speed=(json[attr]-cur)/6;
                speed=speed>0?Math.ceil(speed):Math.floor(speed);

                if(attr=='opacity'){
                    obj.style.filter='alpha(opacity:(cur+speed))';
                    opacity=(cur+speed)/100;
                }
                else{
                    obj.style[attr]=cur+speed+'px';
                }
                
                if(isStop){
                    clearInterval(obj.timer);
                    if(fnEnd)fnEnd();
                }
            }
        },30)
    } ;

    function getStyle(obj,name){
        if(obj.currentStyle){
            return obj.currentStyle[name];
        }
        else{
            return getComputedStyle(obj,false)[name];
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值