原生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 相关文章推荐
对象的类型:本地对象(1)
Dec 29 Javascript
屏蔽F1~F12的快捷键的js函数
May 06 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
JavaScript中日期的相关操作方法总结
Oct 24 Javascript
JavaScript代码生成PDF文件的方法
Feb 26 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
OpenLayers3实现图层控件功能
Sep 25 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中使用excel的简单介绍
2013/08/02 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php简单日历函数
2015/10/28 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
详解Python中with语句的用法
2015/04/15 Python
全面了解python字符串和字典
2016/07/07 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
python中bytes和str类型的区别
2019/10/21 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
Python timeit模块原理及使用方法
2020/10/10 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
同事吵架检讨书
2014/02/05 职场文书
安全教育感言
2014/03/04 职场文书
风险评估实施方案
2014/03/09 职场文书
运动会口号16字
2014/06/07 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
2014年科室工作总结
2014/11/20 职场文书
入党积极分子群众意见
2015/06/01 职场文书
大学军训口号大全
2015/12/24 职场文书