原生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 相关文章推荐
Javascript 实用小技巧
Apr 07 Javascript
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
浅谈使用MVC模式进行JavaScript程序开发
Nov 10 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
详解js模板引擎art template数组渲染的方法
Oct 09 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
微信小程序点击item使之滚动到屏幕中间位置
Mar 25 Javascript
js抽奖转盘实现方法分析
May 16 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
php通过sort()函数给数组排序的方法
2015/03/18 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python修改MP3文件的方法
2015/06/15 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python变量命名的7条建议
2019/07/04 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android