当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS高级运动实例分析

JS高级运动实例分析

2019年04月04日  | 移动技术网IT编程  | 我要评论

本文实例分析了js高级运动。分享给大家供大家参考,具体如下:

一、链式运动框架

1.他需要一个回调函数,在运动停止时,开始下一次运动(执行函数)

多物体运动框架改为如下:

function startmove(obj,attr,itarget,fn){
...
  if(icur==itarget){
    clearinterval(obj.timer);
    fn();
  }...
};

然后就可以用它,比如先变宽再变高最后变透明度

startmove(this,'width',300,function(){
  startmove(this,'height',300,function(){
    startmove(this,'opacity',100);
  });
});

二、完美运动框架

1.原本多物体运动框架的缺陷

比如要让他宽度高度同时变300,这样写:

startmove(this,'width',300);
startmove(this,'height',300);

问题:只有高度变300了(因为宽度准备运动时会开一个定时器,这个定时器还没开始运动前,执行高度变化的运动,就把之前的定时器关了)

2.for in

for(i=0;i<=arr.length;i++)和for(i in arr)效果一样

①什么时候用for什么时候用for...in呢?

数组:两个都可以用   json:只能用for...in(因为json下标没有规律,没有length可言)

对数组而言for...in循环不灵活,因为for循环可以从1可以从2等等任意数字开始,而for...in一循环就全部

②for in小应用

function setstyle(obj,attr,value){
  obj.style[attr]=value;
};
setstyle(odiv,'width','300px');
setstyle(odiv,'height','300px');
setstyle(odiv,'background','green');

=====>

function setstyle(obj,json){
  var attr='';
  for(attr in json){
    obj.style[attr]=json[attr];
  }
};
setstyle(odiv,{width:'300px',height:'300px',background:'green'});

③多物体运动框架改进

function startmove(obj,json,fn){
  clearinterval(obj.timer);
  obj.timer=setinterval(function(){
    for(var attr in json){
     if(attr=='opacity'){
        var icur=parseint(parsefloat(getstyle(obj,attr))*100);
      }
      else{
        var icur=parseint(getstyle(obj,attr));
      }
      var ispeed=(json[attr]-icur)/8;
      ispeed=ispeed>0?math.ceil(ispeed):math.floor(ispeed);
      if(icur==json[attr]){
        clearinterval(obj.timer);
        if(fn){
         fn();  //有传函数这个参数才执行,不然会出错
        }
      }
      else{
        if(attr=='opacity'){
          obj.style.filter='alpha(opacity:'+(icur+ispeed)+')';
          obj.style.opacity=(icur+ispeed)/100;
        }
        else{
          obj.style[attr]=icur+ispeed+'px'
        }
      }
    }
  },30);
};

这样还有个问题

if(icur==json[attr]){
  clearinterval(obj.timer);
}

只要json里有任一值到达目标,计时器就停止

比如我让宽度变到103,高度变到300,那高度到不了300就停止了

解决方案

function startmove(obj,json,fn){
  clearinterval(obj.timer);
  obj.timer=setinterval(function(){
    var bstop=true;  //先定义一个值,假设所有值都到了
    for(var attr in json){
     if(attr=='opacity'){
        var icur=parseint(parsefloat(getstyle(obj,attr))*100);
      }
      else{
        var icur=parseint(getstyle(obj,attr));
      }
      var ispeed=(json[attr]-icur)/8;
      ispeed=ispeed>0?math.ceil(ispeed):math.floor(ispeed);
      if(icur!=json[attr]){
        bstop=false;    //并不是所有值都到了,就把bstop设成 false
      }
      if(attr=='opacity'){
        obj.style.filter='alpha(opacity:'+(icur+ispeed)+')';
        obj.style.opacity=(icur+ispeed)/100;
      }
      else{
        obj.style[attr]=icur+ispeed+'px'
      }
    }
    if(bstop){    //所有值都到了,关闭定时器
      clearinterval(obj.timer);
      if(fn){
        fn();  //有传函数这个参数才执行,不然会出错
      }
    }
  },30);
};

更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript运动效果与技巧汇总》、《javascript切换特效与技巧总结》、《javascript查找算法技巧总结》、《javascript动画特效与技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网