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 相关文章推荐
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
jquery中map函数遍历数组用法实例
May 18 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
vue 解决循环引用组件报错的问题
Sep 06 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
jQuery实现异步上传一个或多个文件
Aug 17 jQuery
js实现详情页放大镜效果
Oct 28 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共享内存段示例分享
2014/01/20 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
jquery解析JSON数据示例代码
2014/03/17 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
Python 列表的清空方式
2020/01/13 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
机电一体化应届生求职信范文
2014/01/24 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学生党员自我批评
2014/02/14 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
Spring Boot实现文件上传下载
2022/08/14 Java/Android