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 相关文章推荐
JavaScript中的null和undefined解析
Apr 14 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
如何在JS中实现相互转换XML和JSON
Jul 19 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
Javascript实现基本运算器
Jul 15 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 Javascript
微信小程序动态增加按钮组件
Sep 14 Javascript
js实现GIF图片的分解和合成
Oct 24 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学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
ie focus bug 解决方法
2009/09/03 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
js变量提升深入理解
2016/09/16 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
工作鉴定评语
2014/05/04 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
你会写请假条吗?
2019/06/26 职场文书