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 相关文章推荐
浅析webapp框架AngularUI的demo
Dec 21 Javascript
javascript包装对象实例分析
Mar 27 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
ajax级联菜单实现方法实例分析
Nov 28 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
jquery+php后台实现省市区联动功能示例
May 23 jQuery
简单了解vue 插值表达式Mustache
Jul 22 Javascript
QT与javascript交互数据的实现
May 26 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实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
常用js字符串判断方法整理
2013/10/18 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
Vue中props的使用详解
2018/06/15 Javascript
three.js实现圆柱体
2018/12/30 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
机关出纳岗位职责
2014/04/03 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
党员政治学习材料
2014/05/14 职场文书
师范生见习报告
2014/10/31 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
nginx rewrite功能使用场景分析
2022/05/30 Servers
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers