浅谈原生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版本A*寻路算法
Dec 22 Javascript
JavaScript入门教程(8) Location地址对象
Jan 31 Javascript
JS判断文本框内容改变事件的简单实例
Mar 07 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
Aug 14 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
Angular父子组件通过服务传参的示例方法
Oct 31 Javascript
vue实现文件上传读取及下载功能
Nov 17 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
js实现select下拉框选择
Jan 11 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 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
正则表达式语法
2006/10/09 Javascript
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
深入php数据采集的详解
2013/06/02 PHP
浅析php单例模式
2014/11/25 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
关于反爬虫的一些简单总结
2017/12/13 Python
python线程中同步锁详解
2018/04/27 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
护理专业个人求职简历的自我评价
2013/10/13 职场文书
自动化专业个人求职信范文
2013/11/29 职场文书
促销活动总结怎么写
2014/06/25 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
中秋节慰问信
2015/02/15 职场文书
高中开学感言
2015/08/01 职场文书
Python制作动态字符画的源码
2021/08/04 Python
Django框架中模型的用法
2022/06/10 Python
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS