浅谈原生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 相关文章推荐
iframe 自适应高度[在IE6 IE7 FF下测试通过]
Apr 13 Javascript
在js中单选框和复选框获取值的方式
Nov 06 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
javascript如何使用bind指定接收者
May 04 Javascript
jQuery中odd选择器的定义和用法
Dec 23 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 Javascript
JS实现上传图片实时预览功能
May 22 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python解析中国天气网的天气数据
2014/03/21 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python适合做数据挖掘吗
2020/06/16 Python
pytorch实现查看当前学习率
2020/06/24 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
C#笔试题集合
2013/06/21 面试题
迟到检讨书800字
2014/01/13 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL