一、多物体同时运动

栗子一:多个Div,鼠标移入变高,动态下拉菜单

function startMove(obj,iTarget){ 
  clearInterval(obj.timer);
  obj.timer=setInterval(function(){
    var iSpeed=(iTarget-obj.offsetHeight)/8;
    iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
    if(obj.offsetHeight==iTarget){
      clearInterval(obj.timer);
    }else{
      obj.style.height=obj.offsetHeight+iSpeed+'px';
    }
  },30);
}
  window.onload=function(){
  var oMenu = document.getElementsByClassName('menu');
  var i=0;
  for(i=0;i<oMenu.length;i++){
    oMenu[i].timer=null;//每个div都有自己的定时器
    oMenu[i].onmouseover=function(){
      startMove(this,300);
      //setTimeout(function(){document.getElementsByClassName('mList').item(0).style.display='block'},100);
    }
    oMenu[i].onmouseout=function(){
      startMove(this,30);
    }
  }

}

栗子二:多个div淡入淡出

function startMove(obj,iTarget){
  clearInterval(obj.timer);
  obj.timer=setInterval(function(){
    var iSpeed=(iTarget-obj.alpha)/8;
    iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);

    if(obj.alpha==iTarget){
      clearInterval(obj.timer);
    }else{
      obj.alpha+=iSpeed;document.title=obj.alpha;
      obj.style.filter='alpha(opacity:'+obj.alpha+')';
      obj.style.opacity=obj.alpha/100;
    }
  },30);
}

window.onload=function(){
  var oMenu = document.getElementsByClassName('menu');
  var i=0;
  for(i=0;i<oMenu.length;i++){
      oMenu[i].alpha=null;//把透明度与对象绑定,其他属性也一样
    oMenu[i].onmouseover=function(){
      startMove(this,300);
      //setTimeout(function(){document.getElementsByClassName('mList').item(0).style.display='block'},100);
    }
    oMenu[i].onmouseout=function(){
      startMove(this,30);
    }
  }

}

栗子三:多个div不同属性

function getStyle(obj,attr){
  if(obj.currentStyle){
    return obj.currentStyle[attr];
  }else{
    return getComputedStyle(obj,false)[attr];
  }
}
function startMove(obj,attr,iTarget){//多div运动
//var obj = document.getElementsByClassName('menu');

clearInterval(obj.timer);
obj.timer=setInterval(function(){
  var iCur=0;
  if(attr=='opacity'){
    var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
  }else{
    var iCur=parseInt(getStyle(obj,attr));
}

var iSpeed=(iTarget-iCur)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);console.log(iSpeed+'/'+iCur);
  if(iCur==iTarget){
    clearInterval(obj.timer);
  }else{
    if(attr=='opacity'){
      obj.style.fliter='alpha(opacity:'+(iCur+iSpeed)+')';
      obj.style.opacity=(iCur+iSpeed)/100;
    }else{
      obj.style[attr]=iCur+iSpeed+'px';console.log(obj.style.attr);
    }

  }
},30);
  }
window.onload=function(){

var oMenu = document.getElementsByClassName('menu');
var i=0;
for(i=0;i<oMenu.length;i++){
  oMenu[i].timer=null;
  oMenu[i].onmouseover=function(){
    startMove(this,'opacity',100);
    //startMove(this,'width',300);
    //startMove(this,'height',300);
    //startMove(this,'font-size',50)
    setTimeout(function(){document.getElementsByClassName('mList').item(0).style.display='block'},100);
  }
  oMenu[i].onmouseout=function(){
    startMove(this,'opacity',10);
    //startMove(this,'width',10);
    //startMove(this,'height',30);
    //startMove(this,'font-size',20)
  }
}

}

二、封装自己的运动框架

function getStyle(obj,attr){
  if(obj.currentStyle){
    return obj.currentStyle[attr];
  }else{
    return getComputedStyle(obj,false)[attr];
  }
}
function startMove(obj,attr,iTarget){//多div运动
//var obj = document.getElementsByClassName('menu');

clearInterval(obj.timer);
obj.timer=setInterval(function(){
  var iCur=0;
  if(attr=='opacity'){
    var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
  }else{
    var iCur=parseInt(getStyle(obj,attr));
}

var iSpeed=(iTarget-iCur)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);console.log(iSpeed+'/'+iCur);
  if(iCur==iTarget){
    clearInterval(obj.timer);
  }else{
    if(attr=='opacity'){
      obj.style.fliter='alpha(opacity:'+(iCur+iSpeed)+')';
      obj.style.opacity=(iCur+iSpeed)/100;
    }else{
      obj.style[attr]=iCur+iSpeed+'px';console.log(obj.style.attr);
    }

  }
},30);
  }

js基础之动画(二)的更多相关文章

  1. GSAP JS基础教程--动画的控制及事件

    好多天没有写无博文啦,今天无聊就再写一下! 今天要讲的是TweenLite的一些事件以及,TweenLite动画的控制,TweenMax类似,请自行参考官方文档:http://api.greensoc ...

  2. js基础提高(二)

    JavaScript基础提高(二) 上篇写的是JavaScript的历史.基本的数据类型和基本的语法进填的话讲的就深入一些了. js的函数 1.js函数定义的方式 (1)普通方式 语法:functio ...

  3. JS基础语法(二)

    目录 JavaScript基础语法(二) 八. 函数 1. 函数的概念 2. 函数的使用 声明函数 调用函数 3. 函数的封装 4. 函数的参数 函数的参数匹配问题 5. 函数返回值 6. argum ...

  4. JS基础学习(二)

    昨天把网站上的基础知识看完了,下面是剩下的部分 第六节 JS Window浏览器对象模型 JavaScript全局对象,函数,变量均自动成为window对象的成员. 1.Window对象 1.获取浏览 ...

  5. js基础之动画(三)

    一.链式运动 首先,要改进运动框架 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; ...

  6. js基础之动画(一)

    一.让div动起来 var oBtn = document.getElementById('btn1');  var timer='';//设置定时器 oBtn.onclick=function st ...

  7. 前端新人学习笔记-------html/css/js基础知识点(二)

    4月7日学到的知识点:     一:<img src="1.png" alt="美女"/> alt是给图片添加介绍,当图片没加载出来时,会直接显示a ...

  8. JS——基础知识(二)

    1.变量提升问题 <script> var num=10; fun(); function fun(){ console.log(num); var num=20; } </scri ...

  9. JS基础速成(二)-BOM(浏览器对象模型)

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.BOM(浏览器对象模型) 1.screen对象. console.lo ...

随机推荐

  1. Doragon Kuesuto 1.0

    #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { ; ; ; int actio ...

  2. java实现excel与mysql的导入导出

    注意:编码前先导入poi相关jar包 1 /** * 读excel 到list * * @param file excel file * @param fields 字段数组 * @return * ...

  3. JavaSE复习_5 Eclipse的常见操作

    △用鼠标点击生成的java源文件,按下F4可以观察类的生成的层次结构 △window-showreview:可以显示命令窗口.   window-perspective-reset:可以将打乱的命令窗 ...

  4. 【Todo】蒙特卡洛(蒙特卡罗)树 & 卷积网络

    https://www.zhihu.com/question/41176911/answer/90066752 这里面有关于Deep Learning和蒙特卡洛树的一些内容 https://www.z ...

  5. Android ViewPager刷新解析

    ViewPager刷新解析 原本以为PagerAdapter类似于BaseAdapter 但是使用起来发现刷新还是有区别的 解析如下 先上Demo PagerAdapter的四大函数 getCount ...

  6. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  7. js树目录结构

    jstree https://www.jstree.com/demo/ treejs http://www.treejs.cn/v3/demo.php#_206

  8. linux笔记:RPM软件包管理-yum在线管理

    ip地址配置: 用ifconfig命令只能配置ip和子网掩码,这样只能访问内网:如果需要访问公网则还必须要网关和DNS. 使用setup工具配置ip: 网络yum源配置: 常用yum命令:查询 常用y ...

  9. 【CodeVS 1004】四子连棋

    http://blog.csdn.net/u013598409/article/details/43924465 相比于一年半前,代码的掌控能力强了许多. #include <cstdio> ...

  10. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...