javascript动画对象支持加速、减速、缓入、缓出的实现代码


Posted in Javascript onSeptember 30, 2012

调用接口:

/** 
* @param elem {HTMLElement} 执行动画的HTML元素 
* @param params {JSON} 动画执行过过程中需要修改的HTML属性 
* @param duration {Number} 可选,动画执行时间,单位毫秒 
* @param easing {String} 可选,动画执行的方式,缓入easeIn、缓出easeOut 
* @param callback {Function} 可选,动画执行完成时的回调函数 
* @return 
*/ 
effect.animate(elem, params, duration, easing, callback);

使用它用不了20行代码就可以做一个产品图片减速淡出、加速淡入的切换效果点击这里查看演示效果
//辅助对象,读/写DOM元素属性 
var attribute = { 
get: function(elem, attr){ 
var val; 
if(elem.currentStyle){ 
if(attr === "opacity") { 
val = elem.filters.alpha[attr]; 
}else { 
val = elem.currentStyle[attr]; 
} 
} 
else{ 
val = getComputedStyle(elem)[attr]; 
if(attr === "opacity") { 
val = 100 * val; 
} 
} 
return val; 
}, 
set: function(elem, attr, val){ 
if(attr=='opacity'){ 
elem.style.filter = 'alpha(opacity='+ (val) +')'; 
elem.style.opacity = (val)/100; 
} 
else{ 
elem.style[attr] = val + 'px'; 
} 
} 
}; 
/* 
* 描述: tween动画算法。 
* @param Number t: 动画已经执行的时间(实际上时执行多少次/帧数) 
* @param Number b: 起始位置 
* @param Number c: 终止位置 
* @param Number d: 从起始位置到终止位置的经过时间(实际上时执行多少次/帧数) 
*/ 
var tween = { 
//缓入 
easeIn: function (t, b, c, d){ 
return c * (t/=d) * t + b; 
}, 
//缓出 
easeOut: function (t,b,c,d){ 
return -c * (t/=d) * (t-2) + b; 
} 
}; 
//动画对象 
var effect = { 
animate: function(elem, params, duration, easing, callback){ 
var dt = new Date().getTime(), 
b = 0, 
c = 0, 
d = duration || 500, 
fps = 1000/60; 
var changes = []; 
for(var attr in params){ 
b = parseFloat(attribute.get(elem, attr)); 
c = params[attr] - b; 
changes.push({ 
attr: attr, 
b: b, 
c: c 
}); 
} 
easing = easing || "easeOut"; 
callback = callback || new Function; 
setTimeout(function(){ 
var t = new Date().getTime() - dt; 
var b, c, attr; 
for(var i=0; i<changes.length; i++){ 
b = changes[i].b; 
c = changes[i].c; 
attr = changes[i].attr; 
attribute.set(elem, attr, tween[easing](t, b, c, d)); 
if(d <= t){ 
attribute.set(elem, attr, params[attr]); 
callback(); 
return; 
} 
} 
setTimeout(arguments.callee, fps); 
}, fps); 
} 
}; 
//by rentj1@163.com
Javascript 相关文章推荐
JS小功能(操作Table--动态添加删除表格及数据)实现代码
Nov 28 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
AngularJS指令用法详解
Nov 02 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
深入理解Vue Computed计算属性原理
May 29 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 #Javascript
js 手机号码合法性验证代码集合
Sep 29 #Javascript
JavaScript模板入门介绍
Sep 26 #Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 #Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 #Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 #Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 #Javascript
You might like
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
Node.js事件驱动
2015/06/18 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
python文本数据相似度的度量
2018/03/12 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
圣诞节活动策划方案
2014/06/09 职场文书
酒店端午节活动方案
2014/08/26 职场文书
读后感作文评语
2014/12/25 职场文书
教师听课评语大全
2014/12/31 职场文书
公司人事任命通知
2015/04/20 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript