原生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 相关文章推荐
JQuery 表单中textarea字数限制实现代码
Dec 07 Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
Jan 15 Javascript
jsp 自动编译机制详细介绍
Dec 01 Javascript
JS定时器实现数值从0到10来回变化
Dec 09 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
微信小程序用户拒绝授权的处理方法详解
Sep 20 Javascript
基于JavaScript获取url参数2种方法
Apr 17 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 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 Smarty 字符比较代码
2011/02/27 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php读取本地json文件的实例
2018/03/07 PHP
MSN消息提示类
2006/09/05 Javascript
JavaScript 中的事件教程
2007/04/05 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
Python中endswith()函数的基本使用
2015/04/07 Python
Python易忽视知识点小结
2015/05/25 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
python实现发送邮件及附件功能
2021/03/02 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
销售人员中英文自荐信
2013/09/22 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
小学校园活动策划
2014/01/30 职场文书
大学生军训感想
2014/02/16 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
民事和解协议书格式
2014/11/29 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
TensorFlow的自动求导原理分析
2021/05/26 Python
sql server 累计求和实现代码
2022/02/28 SQL Server