原生js仿jquery animate动画效果


Posted in Javascript onJuly 13, 2016

jquery animate动画效果:

 原生js仿jquery animate动画效果

代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>动画</title>
 <style>
  *{margin:0;padding:0;}
  .box{width: 400px;height: 300px;background: #000;margin:40px auto;color: #fff;font-size: 18px;text-align: center;}
 </style>
 <script>
 //获取对象样式规则信息,IE下使用currentStyle
 function getStyle(obj,style){
  return obj.currentStyle?obj.currentStyle[style]:getComputedStyle(obj,false)[style];
 }
 //原生js动画类似jquery--animate
 function animate(obj,styleJson,callback){
  clearInterval(obj.timer);
  // 开启定时器
  obj.timer=setInterval(function(){
   var flag=true;//假设所有动作都已完成成立。
   for(var styleName in styleJson){
    //1.取当前属性值
    var iMov=0;
    // 透明度是小数,所以得单独处理
    iMov=styleName=='opacity'?Math.round(parseFloat(getStyle(obj,styleName))*100):parseInt(getStyle(obj,styleName));

    //2.计算速度
    var speed=0;
    speed=(styleJson[styleName]-iMov)/8;//缓冲处理,这边也可以是固定值
    speed=speed>0?Math.ceil(speed):Math.floor(speed);//区分透明度及小数点,向上取整,向下取整
    
    //3.判断是否到达预定值
    if(styleJson[styleName]!=iMov){
     flag=false;
     if(styleName=='opacity'){//判断结果是否为透明度
      obj.style[styleName]=(iMov+speed)/100;
      obj.style.filter='alpha(opacity:'+(iMov+speed)+')';
     }else{
      obj.style[styleName]=iMov+speed+'px';
     }
    }
   }
   if(flag){//到达设定值,停止定时器,执行回调
    clearInterval(obj.timer);
    if(callback){callback();}
   }
  },30)
 }
 window.onload=function(){
  document.getElementById('box').onclick=function(){
   var oThis=this;
   animate(oThis,{'width':'500'},function(){
    animate(oThis,{'height':'400'},function(){alert('宽度高度都增加了')});
   });
  }
  
 }
 
 </script>
</head>
<body>
 <div class="box" id="box">点击效果:宽度增加->高度增加->弹出框</div>
</body>
</html>

注意点
 1.动画前要先停止原来的定时器,不然绑定多个对象的话会冲突
 2.定时器的id要区分开,不能重叠,这里我直接那绑定对象的 对象来赋值  obj.timer
 3.要判断所要执行的动画,是否全部到了设定值=> flag,全部执行完再停止定时器再执行回调函数
 4.javascript的数据类型转换问题
alert(0.07*100);
//弹出7.000000000000001
注意:Javascript在存储时并不区分number和float类型,而是统一按float存储。而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义:
 decimal64对应的整形部分长度为 10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志。
 5.传入的json数据不能带px,例如{'width':'300px'},为了兼容透明度的数值,没想到好的处理方式,有没有大神指导下...
 6.该定时器做了缓冲处理,变化越来越慢,想要快速的效果或者匀速的效果,只需要在2.计算速度那块做下处理就可以
 7.不兼容css3的属性,只兼容了(width,height,top,left,right,bottom,opacity)
 8.获取对象样式的信息,要判断IE或者火狐浏览器,区别对待

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
lib.utf.js
Aug 21 Javascript
javascript window对象属性整理
Oct 24 Javascript
html a标签-超链接中confirm方法使用介绍
Jan 04 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
javascript函数式编程程序员的工具集
Oct 11 Javascript
jquery+json实现分页效果
Mar 07 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
Angularjs CURD 详解及实例代码
Sep 14 Javascript
深入理解Angularjs 脏值检测
Oct 12 Javascript
Vuex的初探与实战小结
Nov 26 Javascript
vue中利用iscroll.js解决pc端滚动问题
Feb 15 Javascript
详解ES6实现类的私有变量的几种写法
Feb 10 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 #Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 #Javascript
Javascript类型系统之undefined和null浅析
Jul 13 #Javascript
JS基础随笔(菜鸟必看篇)
Jul 13 #Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 #Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 #Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 #Javascript
You might like
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
PHP分页类集锦
2014/11/18 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
node.js的事件机制
2017/02/08 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
vue开发移动端底部导航条功能
2020/04/08 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
pandas中的series数据类型详解
2019/07/06 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
就业推荐表自我鉴定范文
2014/03/21 职场文书
网站推广策划方案
2014/06/04 职场文书
车队安全员岗位职责
2015/02/15 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
离婚财产分割协议书
2015/08/11 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs