原生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 相关文章推荐
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
Jan 09 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
jQuery+JSON实现AJAX二级联动实例分析
Dec 18 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
深入理解jQuery.data() 的实现方式
Nov 30 Javascript
Javascript for in的缺陷总结
Feb 03 Javascript
Javascript 实现匿名递归的实例代码
May 25 Javascript
使用D3.js创建物流地图的示例代码
Jan 27 Javascript
详解vue 数据传递的方法
Apr 19 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
Python实现获取某天是某个月中的第几周
2015/02/11 Python
python如何获取服务器硬件信息
2017/05/11 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
python手写均值滤波
2020/02/19 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
企业内部培训方案
2014/02/04 职场文书
导师就业推荐信范文
2014/05/22 职场文书
保护动物的宣传语
2015/07/13 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android