原生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 相关文章推荐
Js基础学习资料
Nov 23 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
Oct 10 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
create-react-app构建项目慢的解决方法
Mar 14 Javascript
vue组件与复用详解
Apr 08 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
咖啡书吧创业计划书
2014/01/13 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
创先争优活动心得体会
2014/09/04 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
部队2014年终工作总结
2014/11/27 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
德生2P3收音机开箱评测
2022/04/30 无线电
React自定义hook的方法
2022/06/25 Javascript