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之软键盘实现(js源码)
Jan 30 Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
详细解读JavaScript编程中的Promise使用
Jul 27 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
Vue+Element使用富文本编辑器的示例代码
Aug 14 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
javascript Function函数理解与实战
Dec 01 Javascript
mac上配置Android环境变量的方法
Jul 08 Javascript
vue使用watch监听属性变化
Apr 30 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
分析JS中this引发的bug
2017/12/12 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python2.x与Python3.x的区别
2016/01/14 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
信息管理应届生求职信
2014/03/07 职场文书
争做文明公民倡议书
2014/08/29 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
工程合作意向书范本
2015/05/09 职场文书
小学数学教学随笔
2015/08/14 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS