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 相关文章推荐
基于jquery的回到页面顶部按钮
Jun 27 Javascript
js有序数组的连接问题
Oct 01 Javascript
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
jquery动态增加删减表格行特效
Nov 20 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
浅析location.href跨窗口调用函数
Nov 22 Javascript
jQuery使用方法
Feb 04 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 Javascript
VUE实现吸底按钮
Mar 04 Vue.js
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
一个简易需要注册的留言版程序
2006/10/09 PHP
discuz7 phpMysql操作类
2009/06/21 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
JavaScript中“+=”的应用
2007/02/02 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
js实现登录与注册界面
2017/11/01 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
了解重排与重绘
2019/05/29 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python程序员面试题 你必须提前准备!
2018/01/16 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
个人授权委托书范本
2014/09/14 职场文书
小学信息技术教学反思
2016/02/16 职场文书