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 相关文章推荐
jquery tools系列 expose 学习
Sep 06 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
textarea 控制输入字符字节数(示例代码)
Dec 27 Javascript
jquery.post用法之type设置问题
Feb 24 Javascript
jquery根据属性和index来查找属性值并操作
Jul 25 Javascript
详解JavaScript中Hash Map映射结构的实现
May 21 Javascript
Three.js学习之几何形状
Aug 01 Javascript
AngularJS基础 ng-list 指令详解及示例代码
Aug 02 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
JS前端可扩展的低代码UI框架Sunmao使用详解
Jul 23 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 中的4种标记风格介绍
2012/05/10 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
初识PHP
2014/09/28 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
JavaScript字符串对象
2017/01/14 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python中rc1什么意思
2020/06/19 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
2014年党员整改措施
2014/10/24 职场文书
五一晚会主持词
2015/07/01 职场文书
php 原生分页
2021/04/01 PHP
Mysql数据库命令大全
2021/05/26 MySQL
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
Redis三种集群模式详解
2021/10/05 Redis