浅谈原生JS实现jQuery的animate()动画示例


Posted in Javascript onMarch 08, 2017

本文介绍了浅谈原生JS实现jQuery的animate()动画示例,希望此文章对各位有所帮助。

参数介绍:

obj 执行动画的元素
css JSON数值对,形式为“{属性名: 属性值}",指要执行动画的书序及其对应值
interval 属性每执行一次改变的时间间隔
speedFactor 速度因子,使动画具有缓冲效果,而不是匀速不变(speedFactor为1)
func 执行完动画后的回调函数

注意:

必须为每一个元素分别添加一个定时器,否则会互相影响。

cur != css[arr]判断是否每一个属性已经达到目标值。只有所有属性都达到目标值,才会清除定时器,flag的作用是防止某个属性第一个达到目标值但还有其他属性没有达到目标值的情况下清除定时器。因此,在每次改变前初始化flag为true,只要遇到一个没有达到目标的属性,就将flag置为false,直至所有属性达到目标值才清除定时器。

属性值opacity的值有小数,所以需要特殊处理: Math.ceil(speed)和Math.floor(speed)以及* 100和 / 100操作。

function animate(obj, css, interval, speedFactor, func) { 
  clearInterval(obj.timer); 
  function getCss(obj, prop) { 
    if (obj.currentStyle) 
      return obj.currentStyle[prop]; // ie 
    else  
      return document.defaultView.getComputedStyle(obj, null)[prop]; // 非ie 
  } 
  obj.timer = setInterval(function(){ 
    var flag = true; 
    for (var prop in css) { 
      var cur = 0; 
      if(prop == "opacity")  
        cur = Math.round(parseFloat(getStyle(obj, prop)) * 100); 
      else  
        cur = parseInt(getStyle(obj, prop)); 
      var speed = (css[prop] - cur) * speedFactor; 
      speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); 
      if (cur != css[prop]) 
        flag = false; 
      if (prop == "opacity") { 
        obj.style.filter = "alpha(opacity : '+(cur + speed)+' )"; 
        obj.style.opacity = (cur + speed) / 100; 
} 
      else  
        obj.style[prop] = cur + speed + "px"; 
    } 
    if (flag) { 
      clearInterval(obj.timer); 
      if (func) 
        func(); 
    } 
  }, interval); 
} 
var li = document.getElementsByTagName("li"); 
for(var i = 0; i < li.length; i ++){ 
  li[i].onmouseover = function(){ 
    animate(this, {width: 100, opacity: 0.5}, 10, 0.01, function(){ 
      alert("Finished!"); 
    }); 
  } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
js实现图片轮播效果
Dec 19 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
jQuery点击头像上传并预览图片
Feb 23 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
ng-repeat指令在迭代对象时的去重方法
Oct 02 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 Javascript
React中获取数据的3种方法及优缺点
Feb 18 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 #Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 #Javascript
JS仿JQuery选择器功能
Mar 08 #Javascript
vue数据双向绑定原理解析(get &amp; set)
Mar 08 #Javascript
footer定位页面底部(代码分享)
Mar 07 #Javascript
vue父子组件的数据传递示例
Mar 07 #Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
Mar 07 #Javascript
You might like
php中看实例学正则表达式
2006/12/25 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
Python短信轰炸的代码
2020/03/25 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
物业管理求职自荐信
2013/09/25 职场文书
上级检查欢迎词
2014/01/18 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
天网工程实施方案
2014/03/26 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server