浅谈原生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修改网页背景颜色通过css方法实现
Jun 06 Javascript
JS数组(Array)处理函数整理
Dec 07 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
Mar 03 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
Apr 17 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
Dec 13 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
Sep 04 Javascript
微信小程序实现下拉刷新动画
Jun 21 Javascript
vue.js this.$router.push获取不到params参数问题
Mar 03 Javascript
Vue Object 的变化侦测实现代码
Apr 15 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数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
python绘制趋势图的示例
2020/09/17 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
中学教师管理制度
2014/01/14 职场文书
代理班主任的自我评价
2014/02/04 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
小学安全汇报材料
2014/08/14 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
通知怎么写?
2019/04/17 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技