浅谈原生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下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
JavaScript打字小游戏代码
Dec 26 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
Nov 06 Javascript
javascript得到当前页的来路即前一页地址的方法
Feb 18 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
Dec 24 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
vue-cli脚手架引入图片的几种方法总结
Mar 13 Javascript
5分钟快速掌握JS中var、let和const的异同
Sep 19 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
重学JS之显示强制类型转换详解
Jun 30 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
一些常用的JS功能函数代码
2009/06/23 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
Python中的闭包总结
2014/09/18 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
简述Python2与Python3的不同点
2018/01/21 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
企业宗旨标语
2014/06/10 职场文书
青奥会口号
2014/06/12 职场文书
培训科主任岗位职责
2014/08/08 职场文书
安全生产工作汇报
2014/10/28 职场文书
2015元旦节寄语
2014/12/08 职场文书
旷课检讨书范文
2015/01/27 职场文书
2015年检验科工作总结
2015/04/27 职场文书