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中的数学函数集合
May 08 Javascript
基于jquery tab切换(防止页面刷新)
May 23 Javascript
实现局部遮罩与关闭原理及代码
Feb 04 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
jquery.post用法示例代码
Jan 03 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
javascript 缓冲运动框架的实现
Sep 29 Javascript
详解vue.js之props传递参数
Dec 12 Javascript
详解vue-cli3多环境打包配置
Mar 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下使用curl模拟用户登陆的代码
2010/09/10 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python3 爬取图片的实例代码
2018/11/06 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
如何写一个自定义标签
2012/12/28 面试题
妈妈的账单教学反思
2014/02/06 职场文书
小学生读书感言
2014/02/12 职场文书
社区消防工作实施方案
2014/03/21 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
前台岗位职责
2015/02/13 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
停发工资证明范本
2015/06/12 职场文书
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers