浅谈原生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 相关文章推荐
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
浅谈javascript中onbeforeunload与onunload事件
Dec 10 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
分享javascript、jquery实用代码段
Oct 20 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 Javascript
JS+HTML5 canvas绘制验证码示例
Dec 05 Javascript
ES6的Fetch异步请求的实现方法
Dec 07 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
JavaScript前端实现压缩图片功能
Mar 06 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
Javascript----文件操作
2007/01/18 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
详解node.js 事件循环
2020/07/22 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python socket网络编程之粘包问题详解
2018/04/28 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
大学生村官演讲稿
2014/04/25 职场文书
个人总结与自我评价
2014/09/18 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
黄河绝恋观后感
2015/06/08 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
创业计划书之水果店
2019/07/18 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
Nginx配置Https安全认证的实现
2021/05/26 Servers