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 语言基础知识点总结(思维导图)
Nov 10 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
基于jQuery实现网页打印功能
Dec 01 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
jQuery使用cookie与json简单实现购物车功能
Apr 15 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
Dec 06 Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
vue中如何使用ztree
Feb 06 Javascript
小程序实现列表展开收起效果
Jul 29 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算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
如何基于js判断浏览器版本
2020/02/20 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python日志模块logging基本用法分析
2018/08/23 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
wxpython绘制圆角窗体
2019/11/18 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
物业招聘计划书
2014/01/10 职场文书
端午节活动策划方案
2014/03/09 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
部队2015年终工作总结
2015/04/02 职场文书
走进毛泽东观后感
2015/06/04 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python