JS高级运动实例分析


Posted in Javascript onDecember 20, 2016

本文实例分析了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高级程序设计》读书笔记
Nov 30 Javascript
Javascript的严格模式strict mode详细介绍
Jun 06 Javascript
ExpressJS入门实例
Jan 14 Javascript
微信小程序 空白页重定向解决办法
Jun 27 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
vue cli升级webapck4总结
Apr 04 Javascript
浅谈vue项目可以从哪些方面进行优化
May 05 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
js实现简单进度条效果
Mar 25 Javascript
CSS+jQuery实现简单的折叠菜单
Dec 20 #Javascript
jQuery常见的选择器及用法介绍
Dec 20 #Javascript
JS基于面向对象实现的选项卡效果示例
Dec 20 #Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 #Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 #Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 #Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 #Javascript
You might like
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
解密效果
2006/06/23 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
python逆序打印各位数字的方法
2018/06/25 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
django创建超级用户过程解析
2019/09/18 Python
python将数组n等分的实例
2019/12/02 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
什么是serialVersionUID
2016/03/04 面试题
制药工程专业应届生求职信
2013/09/24 职场文书
跟单文员岗位职责
2014/01/03 职场文书
企业宣传标语
2014/06/09 职场文书
小学清明节活动总结
2014/07/04 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS