原生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中用window.open()打开多个窗口的name问题
Mar 13 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
jQuery限制图片大小的方法
May 25 Javascript
移动端点击态处理的三种实现方式
Jan 12 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
jQuery实现开关灯效果
Aug 02 jQuery
瀑布流的实现方式(原生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 和 MYSQL
2006/10/09 PHP
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Vue实现todo应用的示例
2021/02/20 Vue.js
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python 解析简单的XML数据
2020/07/24 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
英国家用电器购物网站:Hughes
2018/02/23 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
Python如何定义一个函数
2015/09/01 面试题
毕业生应聘求职信
2014/07/10 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
入伍通知书
2015/04/23 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
2016年母亲节广告语
2016/01/28 职场文书
python中%格式表达式实例用法
2021/06/18 Python
python之django路由和视图案例教程
2021/07/26 Python