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 相关文章推荐
jquery的$(document).ready()和onload的加载顺序
May 26 Javascript
JavaScript继承方式实例
Oct 29 Javascript
JS 如果改变span标签的是否隐藏属性
Oct 06 Javascript
javascript 实现子父窗体互相传值的简单实例
Feb 17 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
详解jQuery-each()方法
Mar 13 jQuery
vue.js实现h5机器人聊天(测试版)
Jul 16 Javascript
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
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
重定向实现代码
2006/11/20 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
js断点调试经验分享
2017/12/08 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
中餐厅主管的职责范文
2014/02/04 职场文书
个人委托书格式
2014/04/04 职场文书
保护黄河倡议书
2014/05/16 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
依法行政工作汇报
2014/10/28 职场文书
Python基础知识之变量的详解
2021/04/14 Python