浅谈原生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 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
深入理解jQuery之事件移除
Jun 02 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
使用jquery如何获取时间
Oct 13 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
Angular6 Filter实现页面搜索的示例代码
Dec 02 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python能做哪些生活有趣的事情
2020/09/09 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
标准导师推荐信(医学类)
2013/10/28 职场文书
自荐信怎么写好
2013/11/11 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
货车司机岗位职责
2014/03/18 职场文书
中秋客户感谢信
2015/01/22 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
十七岁的单车观后感
2015/06/12 职场文书
政协常委会议主持词
2015/07/03 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
Linux磁盘管理方法介绍
2022/06/01 Servers