开发者社区> 问答> 正文

js匀速运动框架,多属性运动,如何让每个属性都到达目标值?

我想用onoff=true判断,可是,写好后,效果不好,还是只要有一个属性到达目标值,timer就会停止?
请前辈帮看下用onoff=true部分的代码,麻烦帮解决下这个问题?谢谢

Demo

<br> *{margin:0;padding:0;}<br> html,body{width:100%;height:100%;}<br> #div1{width:100px;height:100px;background:#6633cc;position:absolute;left:200px;top:0;}<br> 
</div>
<script>
    window.onload=function(){
        addPic();
    }
    function addPic(){
        var div1=document.getElementById("div1");
        //调用运动框架
        uniformMove(div1,{width:200,height:300},5);//多属性运动
    }
    function uniformMove(obj,json,iSpeed,fn){
        var timer=null;
        var num=-iSpeed;
        var iCur=0;
        var iTarget=0;
        var onoff=true;//判断每个属性是否到达目标
        clearInterval(obj.timer);
        obj.timer=setInterval(function(){
            for(var attr in json){
                iTarget=json[attr];
                iCur=getStyle(obj,attr);
                if(iCur<iTarget){
                    if(Math.abs(iCur-iTarget)<iSpeed){
                        iSpeed=Math.abs(iCur-iTarget);
                    }
                }else{
                    if(Math.abs(iCur-iTarget)<Math.abs(iSpeed)){
                        iSpeed=-Math.abs(iCur-iTarget);
                    }else{
                        iSpeed=num;
                    }
                }
                if(iCur==iTarget){
                    clearInterval(obj.timer);
                    if(fn){
                        fn();
                    }
                }
                else{
                    obj.style[attr]=iCur+iSpeed+"px";
                }
            }
        },15);
    }
    function getStyle(obj,attr){
        return parseFloat(getComputedStyle(obj,null)[attr]);//要用parseFloat
    }
</script>

展开
收起
杨冬芳 2016-07-05 16:18:14 1797 0
1 条回答
写回答
取消 提交回答
  • IT从业

    是一个右括号的问题

    2019-07-17 19:51:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载