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 相关文章推荐
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
Javascript的比较汇总
Jul 25 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
Sep 30 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
Vue组件和Route的生命周期实例详解
Feb 10 Javascript
js传递数组参数到后台controller的方法
Mar 29 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
setTimeout与setInterval的区别浅析
Mar 23 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
php中session退出登陆问题
2014/02/27 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
laravel自定义分页效果
2017/07/23 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
新手简单了解vue
2019/05/29 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python中生成ndarray实例讲解
2021/02/22 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
《童趣》教学反思
2014/02/19 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
英语邀请函范文
2015/02/02 职场文书
2014年底个人工作总结
2015/03/10 职场文书
同学聚会通知书
2015/04/20 职场文书
2015年党小组工作总结
2015/05/26 职场文书