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 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
javascript DOM编程实例(智播客学习)
Nov 23 Javascript
javascript 模式设计之工厂模式学习心得
Apr 27 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
Jul 26 Javascript
微信小程序可滑动周日历组件使用详解
Oct 21 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 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
PHP防CC攻击实现代码
2011/12/29 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
python去掉行尾的换行符方法
2017/01/04 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python中 map()函数的用法详解
2018/07/10 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Python如何重新加载模块
2020/07/29 Python
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
商场端午节活动方案
2014/01/29 职场文书
公司员工活动策划方案
2014/08/20 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
运动与健康自我评价
2015/03/09 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers